站在临时的演讲台上,我想人们对accuracy versus precision的概念感到困惑。这是否如一些人所说的那样是一个问题?有问题吗?一个错误?还是浮点运算的一个预期行为? 90度是一个完全可以表示为整数的数字,即使是双精度型。但是π/2弧度是一个不能精确表示的真实的,所以这种表示会稍微不准确。损失在于准确性。事实是,这是预期的行为。我们永远不应该相信结果中最不重要的部分。 接下来,当我们计算三角函数的值时,可能会有额外的精度损失。我们并没有得到确切的结果,我们知道在符号意义上是正确的。因此sin(pi/3)可能不完全是sqrt(3)/2,但无论如何我们都不能完全表示sqrt(3)/2。所有这些都是预期的,并且是应该由良好代码处理的行为,而不是信任这些数字的LSB。
由于三角函数的值给出了近似值,因此PI的值是无理的。对于计算器中的精确值,请使用以下命令: public class MyClass { public static void main(String strategy []){
double b1=Math.cos(Math.toRadians(90));
//approximate value
System.out.println(b1);
//exact value System.out.println(String.format("%.15f",b1));
// I recommend you to using it upto 15f for precisely value
double b2=Math.sin(Math.toRadians(30));
//approximate value
System.out.println(b2);
//exact value
System.out.println(String.format("%.15f",b2));
}
5条答案
按热度按时间1yjd4xko1#
三角函数:
因为pi/2不能在IEEE-754浮点中精确表示,这意味着它必须偏离某个值x,即它由pi/2 +- x表示,其中x <浮点系统中的最低有效位。在这种情况下,它是2^-53 = 1.1102e-16。
在该特定情况下,X 〜 = 6.123233995736766E-17,其为最大误差的约55%。所以,这是一个相当好的结果…
8i9zcol22#
查看Javadoc。“从度到弧度的转换通常是不精确的.”
euoag5mw3#
该值非常接近正确的结果。这看起来像是将度转换为弧度的浮点运算中的精度损失。
pcww981p4#
站在临时的演讲台上,我想人们对accuracy versus precision的概念感到困惑。这是否如一些人所说的那样是一个问题?有问题吗?一个错误?还是浮点运算的一个预期行为?
90度是一个完全可以表示为整数的数字,即使是双精度型。但是π/2弧度是一个不能精确表示的真实的,所以这种表示会稍微不准确。损失在于准确性。事实是,这是预期的行为。我们永远不应该相信结果中最不重要的部分。
接下来,当我们计算三角函数的值时,可能会有额外的精度损失。我们并没有得到确切的结果,我们知道在符号意义上是正确的。因此sin(pi/3)可能不完全是sqrt(3)/2,但无论如何我们都不能完全表示sqrt(3)/2。所有这些都是预期的,并且是应该由良好代码处理的行为,而不是信任这些数字的LSB。
tjvv9vkg5#
由于三角函数的值给出了近似值,因此PI的值是无理的。对于计算器中的精确值,请使用以下命令:
public class MyClass { public static void main(String strategy []){
}