Использование Java на ПК с Windows 7 (не уверен, имеет ли это значение) и вызов Math.cos () для значений, которые должны возвращать 0 (например, pi / 2), вместо этого возвращает небольшие значения, но небольшие значения, если недопонимание, намного больше, чем 1 ulp от нуля.
Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32
Это на самом деле в пределах 1 ульпы, и я просто запутался? И будет ли это приемлемым методом-оберткой для устранения этой незначительной неточности?
public static double cos(double a){
double temp = Math.abs(a % Math.PI);
if(temp == Math.PI/2)
return 0;
return Math.cos(a);
}