Java Math.cos() Method Does Not Return 0 When Expected

Posted by dimo414 on Stack Overflow See other posts from Stack Overflow or by dimo414
Published on 2010-02-10T09:31:48Z Indexed on 2010/03/12 6:57 UTC
Read the original article Hit count: 325

Filed under:
|
|
|

Using Java on a Windows 7 PC (not sure if that matters) and calling Math.cos() on values that should return 0 (like pi/2) instead returns small values, but small values that, unless I'm misunderstanding, are much greater than 1 ulp off from zero.

Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32

Is this in fact within 1 ulp and I'm simply confused? And would this be an acceptable wrapper method to resolve this minor inaccuracy?

public static double cos(double a){
    double temp = Math.abs(a % Math.PI);
    if(temp == Math.PI/2)
        return 0;
    return Math.cos(a);
}

© Stack Overflow or respective owner

Related posts about java

Related posts about trigonometry