[ 
https://issues.apache.org/jira/browse/MATH-843?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13431197#comment-13431197
 ] 

Dominik Gruntz commented on MATH-843:
-------------------------------------

{quote}
I don't understand: The Javadoc now explicitly states "double-precision".
Let me know whether it can be made clearer.
{quote}
The computation may be done in the registers of your processor and these 
registers may provide more accuracy (typically 80bits). In Java this extended 
precision can be prevented by using the {{strictfp}} keyword.

The same holds for your test. It should be marked with {{strictfp}} as well. On 
some machines, the expression {{1 + Precision.EPSILON}} in the test {{1 + 
Precision.EPSILON == 1}} might be hold in a register with extended precision 
and thus may be greater than {{1}}. The expression then returns false.

Regarding the other definition: This is the one which can be found in 
[Wikipedia|http://en.wikipedia.org/wiki/Machine_epsilon] and in the [Computing 
Surveys article by 
Goldberg|http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html]. The 
machine epsilon is defined as upper bound of the relative error which may occur 
when a real number is rounded to its closest floating-point approximation. This 
upper bound is {{B^(-(p-1))/2}} where {{B}} is the base and {{p}} is the 
precision or length of the mantissa. For IEEE754 64-bit numbers (e.g. for 
{{double}}) this value is {{2^(-53)}}.
                
> Precision.EPSILON: wrong documentation
> --------------------------------------
>
>                 Key: MATH-843
>                 URL: https://issues.apache.org/jira/browse/MATH-843
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.0
>            Reporter: Dominik Gruntz
>            Priority: Minor
>              Labels: documentation
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> The documentation of the Field {{EPSILON}} in class 
> {{org.apache.commons.math3.util.Precision}} states, that {{EPSILON}} is the 
> smallest positive number such that {{1 - EPSILON}} is not numerically equal 
> to 1, and its value is defined as 1.1102230246251565E-16.
> However, this is NOT the smallest positive number with this property.
> Consider the following program:
> {code}
> public class Eps {
>   public static void main(String[] args) {
>     double e = Double.longBitsToDouble(0x3c90000000000001L);
>       double e1 = 1-e;
>       System.out.println(e);
>       System.out.println(1-e);
>       System.out.println(1-e != 1);
>   }
> }
> {code}
> The output is:
> {code}
> % java Eps
> 5.551115123125784E-17
> 0.9999999999999999
> true
> {code}
> This proves, that there are smaller positive numbers with the property that 
> 1-eps != 1.
> I propose not to change the constant value, but to update the documentation. 
> The value {{Precision.EPSILON}} is 
> an upper bound on the relative error which occurs when a real number is
> rounded to its nearest Double floating-point number. I propose to update 
> the api docs in this sense.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to