sia*_*ooo 7 java math floating-point precision trigonometry
为什么tan 45(弧度为0.7853981633974483)给我0.9999?以下代码有什么问题?
System.out.println(Math.tan(Math.toRadians(45.0)) );
Run Code Online (Sandbox Code Playgroud)
我不认为这里有任何错字.
那么这里的解决方案是什么?
tmy*_*ebu 10
最近double到pi/4是正好 0x1.921fb54442d18p-1.这个双精度的切线比你需要的更多,是0x1.fffffffffffff72cece67p-1.四舍五入到最接近的位置double给出了完全 0x1.fffffffffffffp-1因为0x1.fffffffffffff72cece67p-1小于0x1.fffffffffffff8p-1.