Math.sin()没有给出准确的结果[我正在使用Math.toRadians传递正确的值]

时间:2016-08-29 20:56:31

标签: android

我实际上在我的Android应用程序中使用Math.sin()来计算给定角度的正弦(使用Math.toRadians(angle_in_degrees))。例如,当我想得到Math.cos(90)为0时,结果是6.123233 ... E-17。谢谢你。

2 个答案:

答案 0 :(得分:0)

你要从Math.cos(Math.toRadians(90))中得到一个近似值

6.123233 ... E-17 == 0.00000000000000006123233 ...基本上是0

以下链接应该有助于清除编程中双精度/浮点数的精度。 http://www.java67.com/2015/09/float-and-double-value-comparison-in-java-use-relational.html

答案 1 :(得分:0)

对于浮点数,系统通常只能逼近它们的值。例如,系统将返回类似于0.333333的表达式(1.0 / 3)。小数点后面的3s数量会有所不同,具体取决于你是浮点数还是双打数,但它仍然会被限制在某个有限长度内。

如果您只是显示该值,则可以使用String.format("%0.2f", value)之类的内容限制位数,或使用Math.round()之类的舍入函数对其进行舍入。

当您需要将值与某些东西进行比较时,会出现棘手的部分。您不能只使用if (value == some_constant)甚至if (value == some_variable)。至少,您通常必须使用if (Math.abs(value - some_constant) < 0.001)之类的东西。 '0.001'的实际值取决于您的特定应用程序的需要,通常定义为命名常量。

对于更复杂的需求,您可以在Floating-Point Guide

中实施该算法
相关问题