如果我将浮点数乘以它的倍数 (1.3 * 10) 以将其放入整数中,它是否比在计算中保持浮点数更准确?

If I times a float by it's multiple (1.3 * 10) to put it into an integer, is it more accurate than staying with the float in computation?

提问人:Paul Carlton 提问时间:5/4/2016 最后编辑:Paul Carlton 更新时间:5/4/2016 访问量:76

问:

好的,好的。我知道那里有图书馆。我知道有很多关于浮动精度的帖子,但我遇到的那些并没有真正为我回答这个问题。作为一个好奇的人,我想要一个彻底的答案。

顶级域名;

在 JavaScript 中,将浮点数“转换”为整数是否更准确,而不是仅仅通过浮点数计算?意思是:在一个方程中,如果 I ,是不是更准确?1.3e-12 * 1.4(1.3e-12 * 10000000000000) * (1.4 * 10000000000000) / 10000000000000

我想知道我是否取一个数字,比如:1.3e-11 和 ,是否需要 not 运算符 ,或任何将截断 64 位浮点数的按位运算符,以确保浮点数变为整数?如果这些数字无论如何都以浮点数的形式存储在 javascript 中,那么在我看来,它并不是真的需要。另外,在 JavaScript 中将浮点数“转换”为整数是否安全且非常准确?如果我以这种方式处理大小数,它似乎确实提高了输出精度。~~(1.3 * Math.pow(11, 10))~~

例如:

144 * 0.3048 / 0.0254

从 144 平方英尺到英寸的转换得到 1728.0000000000002。然而:

var a, b, c, p = 4;
a = 144 * Math.pow(10, p);
b = 0.3048 * Math.pow(10, p);
c = 0.0254 * Math.pow(10, p);
console.log((a * b / c) / Math.pow(10, p));

正好产生 1728。

我的另一个问题是:在一系列计算中,存储的未转换为较大整数的超长计算浮点数是否不太准确?

JavaScript 数字 浮点精度

评论

0赞 Bergi 5/4/2016
* 10000000000000绝不是“整数转换”。顺便说一句,你的第一个例子是无效的,因为你需要在乘法后除两次。
0赞 Bergi 5/4/2016
浮点数确实有 53 位用于精确整数,如果使用按位运算符,则只有 31 位。
0赞 Paul Carlton 5/4/2016
@Bergi - 是的,这就是我得到的,特别是>>班操作员。我喜欢这种晦涩难懂的感觉,但对于非常大的数字来说,这可能不是最好的。- 我认为第一个例子很好。将等式的每个部分乘以相同的数字,然后除以该数字。
0赞 Andrew Morton 5/4/2016
“从 144 平方英尺转换为英寸”???通常,将 [dimension]^2 转换为 [dimension] 表示公式中有错误。如果 16 位有效数字的精度很重要,则应评估计算每个阶段的误差范围。否则,只需使用四舍五入到合理数量的有效数字来显示最终值。每个计算机科学家都应该了解的关于浮点运算的知识可能会引起您的兴趣。
0赞 Paul Carlton 5/4/2016
@AndrewMorton - 嗯,转换是以米为单位,然后除以新英制单位的公制转换。所以一英尺有 3048 米,一英寸有 0.0254 米。是的,我以前浏览过那个阅读。我可能应该花几个晚上仔细阅读它。

答: 暂无答案