Code review request for 6908131 Pure Java implementations of StrictMath.floor(double) &StrictMath.ceil(double)

Joseph D. Darcy Joe.Darcy at Sun.COM
Tue Dec 15 19:16:34 UTC 2009


Dmitry Nadezhin wrote:
> > The current specification of the "interesting" methods in 
> StrictMath, such as sin/cos, log, > etc. are to use the FDLIBM 
> algorithms.
>
> Thank you. I forgot about these lines in java.lang.StrictMath .

[snip]

> As specification of java.lang.StrictMath is in terms of reference 
> fdlibm C library
> and algorithms in new java.lang.StrictMath are expected similar to 
> fdlibm algorithms,
> the task of formal verification becomes easier.
>
> The comment 3 in fdlibm's readme file warns about
> ---
>   3. Compiler failure on non-standard code
>   Statements like
>               *(1+(int*)&t1) = 0;
>   are not standard C and cause some optimizing compilers (e.g. GCC)
>   to generate bad code under optimization.    These cases
>   are to be addressed in the next release.
> ---
> Nevertheless, I hope that for some additional assumptions about C 
> pointers, the meaning
> of fdlibm C code can be used as the specification.

The C language does not really define an operational semantics for these 
operations.  In contrast, with the tighter specification of Java's 
integral and floating-point types and expressions using those values, it 
is really well-posed to discuss the meaning of Java versions of these 
algorithms.

> However, there is a question. Many methods of java.lang.StrictMath are
> used in a reference implementation of java.lang.Math methods.
> java.lang.Math specifies methods in terms of accuracy of the returned 
> result
> and monotonicity of the methods.
> Suppose that there is still a bug in fdlibm 5.3 and some fdlibm 
> function fails to
> satisfy one ulp accuracy or monotonicity. What will be the 
> specification of
> corresponding java.lang.StrictMath method in such a case ?

The FDLIBM functions are believed to follow the stated quality of 
implementation criteria in java.lang.Math.  When that turns out not to 
be the case, there are a variety of remedies including fixing the bug in 
FDLIBM.  Fixing bugs I had independently found in pow and tan prompted 
raising the required FDLIBM version from 5.2 to 5.3, see 5033578 "Java 
should require use of latest fdlibm 5.3."

Cheers,

-Joe




More information about the core-libs-dev mailing list