JavaScript 中的所有数学函数都使用弧度代替度数。然而,他们要么不平等,要么我就大错特错了。

从度数到弧度的转换为:

var rad = angle * Math.PI / 180

90度角 等于 1.57079633 弧度

90 度角的余弦 等于 0.
1.57079633 弧度的余弦 等于 -3.20510345 × 10-9.

请注意,在 Javascript 中,所有操作都是一步完成的,以避免舍入错误:

var cos = Math.cos(angle * Math.PI / 180);

我显然在这里遗漏了一些明显的东西,但是天哪,它搞砸了代码吗?

有帮助吗?

解决方案

一切都一步完成,以避免舍入错误

如何避免舍入错误?这只是意味着舍入误差在单独的变量中不可用,仅此而已。

真的 pi 的值无法精确表示为浮点数,因此 pi / 2 的真实值也无法准确表示。所以你不能给 Math.cos 获得 0 所需的精确值。但是嘿 - 10-9 是一个 非常非常小 数字。这意味着如果你画一条 10,000 公里长的线,你最终会偏离相关轴 1 厘米。

这正是处理浮点数时应该预料到的事情。不要与平等进行比较——在一定的公差范围内进行比较。

其他提示

总会有四舍五入的错误。而且浮点在数学上并不是准确的,它仅准确地准确地达到了一定数量的重要数字。

更改您的代码,以便当您有1/1000000000的错误时不会“搞砸”。

对于我们大多数人在计算机上做严重的总和0 等于-3.20510345×10^-9的任何合理程度的准确性,您有权期望使用浮点数。这是一个经常涵盖的话题。

是的,您只是在此处丢失有关类型转换的数据。

弧度的90度不等于1.57079633。如果还有更多小数点的位置,那将按预期直接转换。

您将始终必须谨慎对待这样的事情。如上所述,10^-9足够接近零。

也取自 MSDN:

此外,由于双重类型的精度丧失,具有双重值的算术和分配操作的结果可能会略有不同。例如,分配字面双值的结果在.NET框架的32位和64位版本中可能有所不同。下面的示例说明了当字面值-4.4233060424772E -305和一个值为-4.423306042472E -305的变量时,此差异说明了这一差异。请注意,在这种情况下,解析方法(字符串)方法的结果不会损失精确度。

在计算机中,π/2弧度 不能 完全等于90度,因为π是无限长的数字。因此,除非计算机是∞-d,否则不能期望与π的完美主机。

我才发现:

-3.20510345×10-9与-0.00000000320510345相同,非常接近零。

Google转换为Radian是圆形的,这会导致错误。

我的猜测是,JavaScript因缺乏数字而臭名昭著的JavaScript也会产生不正确的radian,因此其cosign距离已经远了。

不知道我将如何解决这个问题 - 舍入是不可接受的,因为这对其他角度不起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top