在Java中,在应用数学函数时会失去准确性

在Java中,在应用数学函数时会失去准确性,java,floating-point,double,Java,Floating Point,Double,我在使用java数学函数时得到了错误的输出。 预期产出=4.32 当前输出=4.30287105016515 double startHeight= 60.00; double initaldistance=1000.00; double speed=120; startDistance=(initaldistance-1.688*speed); startAngle = Math.toDegrees(Math.atan(startHeight/startDistance)); System.o

我在使用java数学函数时得到了错误的输出。 预期产出=4.32 当前输出=4.30287105016515

double startHeight= 60.00;
double initaldistance=1000.00;
double speed=120;
startDistance=(initaldistance-1.688*speed);
startAngle = Math.toDegrees(Math.atan(startHeight/startDistance));
System.out.println(startAngle);

您的预期输出不正确。问题代码中表示的算术确实有一个接近4.30287的结果。

使用double的结果应该不会太远,也不会有那么多有效数字。由于你的假设可能是错误的,你是否用其他方法测试过这些方程?例如,使用电子表格或计算器?@AndyTurner:请不要随意地把问题作为重复的问题来结束。这种情况下的问题不是由于浮点运算不准确,而是由于数学错误或OP预期的其他错误。你不应该只看一眼问题,看到它涉及浮点和意外的答案,然后得出结论,这是由于浮点行为造成的。你认为这是为什么?@EricPostPhischil:假设是问题所在,它们无法重现。更重要的是,我怀疑这个问题是否会对这个网站的未来访问者有所帮助……比如使用任意精度的软件,尝试一些区间算法,或者用数学方法分析公式以确定误差范围。由于使用的所有函数在使用它们的区域内都是单调的,因此区间算法可能是证明期望值为假的简单方法,而无需进行更深入的分析。我可能想写下来,但我现在正忙于处理非堆栈溢出的事情。其他人可以贡献它。