javascript - 为什么乘以和除以N "fix"浮点表示?

标签 javascript math floating-point floating-point-precision

我正在使用 JavaScript,但问题很普遍。取这个舍入误差:

>> 0.1 * 0.2
0.020000000000000004

This StackOverflow answer提供了一个很好的解释。本质上,某些十进制数不能用二进制精确表示。这是直观的,因为 1/3 在 base-10 中有类似的问题。现在解决方法是:

>> (0.1 * (1000*0.2)) / 1000
0.02

我的问题是这是如何工作的?

最佳答案

这是行不通的。您在那里看到的不是完全 0.02,而是一个足够接近(15 位有效小数位)看起来像的数字。

碰巧将一个操作数乘以 1000,然后将结果除以 1000,会导致产生明显“正确”结果的舍入误差。

您可以在浏览器的控制台中亲自查看效果。使用 Number.toString(2) 将数字转换为二进制,您会看到不同之处:

Console showing <code>0.1</code>, <code>0.2</code>, <code>0.1*0.2</code> and <code>((0.1*(0.2*1000))/1000</code> each with their binary representations

相关性并不意味着因果关系。

关于javascript - 为什么乘以和除以N "fix"浮点表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172403/

相关文章:

javascript - 试图了解此网页如何使用 javascript 产生增长率

haskell - Haskell中1.0999999999999999背后的数学

c++ - 将模数运算符与 float 一起使用

javascript - chrome扩展程序应在youtube标签不清晰时暂停视频

javascript - 与 WEBRTC 的单向通信

iphone - 在 iPhone 上使用 ARM SIMD 进行游戏向量/矩阵运算的正确方法是什么?

c - 寻找GCD的汇编语言程序—— float 异常

javascript - 用于评估值并分配单元格值的 Google 自定义脚本

javascript - 正则表达式:捕获字符串中的所有数字,并作为新的数字字符串返回

math - float 学有问题吗?