Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 三角值与实际不符_Android_Math_Floating Point_Trigonometry - Fatal编程技术网

Android 三角值与实际不符

Android 三角值与实际不符,android,math,floating-point,trigonometry,Android,Math,Floating Point,Trigonometry,我使用toRadians()来转换值并找到这样的三角函数 dataMain=Math.cos(Math.toRadians(dataSub); 但是我有一个问题,比如dataSub=60 答案应该是0.5 但我的程序中的答案是0.50000000000001 甚至dataSub=30 dataMain=Math.sin(Math.toRadians(dataSub); 我的程序中的答案是0.499999994 如何解决此问题?当您将角度从度转换为弧度时,结果是一个通常不能准确表示为浮点数的数字。

我使用
toRadians()
来转换值并找到这样的三角函数

dataMain=Math.cos(Math.toRadians(dataSub);

但是我有一个问题,比如
dataSub=60

答案应该是
0.5
但我的程序中的答案是
0.50000000000001

甚至
dataSub=30

dataMain=Math.sin(Math.toRadians(dataSub);

我的程序中的答案是
0.499999994


如何解决此问题?

当您将角度从度转换为弧度时,结果是一个通常不能准确表示为浮点数的数字。您只有大约16位数字可供使用

所以,当你计算托拉迪安(60)的余弦时,你实际上是在计算一个非常接近但不等于π/3的数字的余弦


如何解决这一问题取决于您的应用程序。在绝大多数现实世界的应用程序中,像这样的微小误差实际上并没有什么区别。如果您希望很好地呈现结果,那么您只需将结果四舍五入到所需的位数。

当您将角度从度转换为弧度时,结果是nu通常不能精确表示为浮点数的mber。您只能使用大约16位数字

所以,当你计算托拉迪安(60)的余弦时,你实际上是在计算一个非常接近但不等于π/3的数字的余弦


如何解决这一问题取决于您的应用程序。在绝大多数现实世界的应用程序中,像这样的微小误差实际上并没有什么区别。如果您希望很好地显示结果,那么您只需将结果四舍五入到所需的位数。

分数存储为浮点数,基本上是一个近似值;这会导致像你描述的那样的小误差。比我更聪明的头脑已经在


最好的解决方法是将数值四舍五入到可接受的位数,

中介绍了几种方法。分数存储为浮点数,基本上是一个近似值;这会导致像您所描述的那样的小误差。比我更聪明的人在


最好的解决方法是将值四舍五入到可接受的位数,在

中介绍了几种方法这里有一些文章可以帮助您:


这里有一些文章可以帮助您:


Jeffrey所说的绝对正确,尤其是在这种情况下。但是,由于以下问题,您可能会发现类似的结果:通常浮点在内部使用基数2表示。这意味着您的数字写为尾数*2^(指数)。这实际上是将您的数字转换为基数2,这并不总是理想的。假设您希望在内部表示0.2。0.2的二进制表示形式不是有限的,实际上是0.00110011…(就像基数10中的1/3是0.3333…)。由于您只存储有限数量的尾数数字,因此存储时该数字将被截断,然后当它转换回十进制进行打印时,它将显示为0.19999…而不是0.2。例如,我在python中注意到了很多这一点。您只需在交互式shell中键入0.2,它就会输出close到0.2,但稍小或稍大。

Jeffrey所说的绝对正确,尤其是在这种情况下。但是,由于以下问题,您可能会发现类似的结果:通常浮点数在内部使用基数2表示。这意味着您的数写为尾数*2^(指数)。这实际上是将您的数字转换为基数2,这并不总是理想的。假设您希望在内部表示0.2。0.2的二进制表示形式不是有限的,实际上是0.00110011…(就像基数10中的1/3是0.3333…)。由于您只存储有限数量的尾数数字,因此存储时该数字将被截断,然后当它转换回十进制进行打印时,它将显示为0.19999…而不是0.2。例如,我在python中注意到了很多这一点。您只需在交互式shell中键入0.2,它就会输出close到0.2,但稍小或稍大