Fw: Question about JEP 306.
joe.darcy at oracle.com
Wed Dec 6 23:15:57 UTC 2017
PS With a more concrete example below....
On 12/5/2017 6:55 PM, Joseph D. Darcy wrote:
> On 12/5/2017 5:07 PM, David Holmes wrote:
>> Adding core-libs-dev as both mailing lists are named in this JEP.
>>> It should also be the case
>>> that there should be a round half up for the decimal place
>>> beyond the last one in the float or double range, to help support
>>> all notions of
>>> (pow(sqrt(3),2) == 3) //true
> Putting aside non-finite values like NaN and infinities, this identity
> is difficult to have hold in any fixed-precision system, including
> IEEE-style floating-point. The mathematical square root function in
> general returns irrational results for rational inputs so the result
> is fundamentally approximated. If my rusty calculus is correct, for x
> >= 0.25, the derivative of sqrt of x has magnitude less than one and
> is positive, meaning there exists some set of multiple input values
> that must get mapped to the same output value. Therefore, the
> information to do an exact inverse operation based on the output is
> not present just from a pigeon hole principle argument.
Consider the square root function on the interval [1, 2), that is the
half-open region that includes 1 but does not include 2. This
corresponds to the floating-point numbers with an exponent of 0. There
are 2^52 floating-point values with this exponent. Mathematically,
sqrt(1) = 1 and sqrt(2) ~= 1.414... Therefore, in floating-point, for
values 1.0 <= x < 2.0, the result of sqrt(x) also has an exponent of 0.
Now we see that there are 2^52 floating-point values with an exponent of
0 and taking a square root of those values will only yield about 0.414 *
2^52 distinct answers. Therefore, we see that using a fixed
floating-point precision, the square root function on [1.0, 2.0)
*cannot* be inverted losslessly since only a minority of the input
elements have distinct answers.
More information about the core-libs-dev