背景
今天看到一个有趣的新闻,浮点数计算导致的灾难,借此机会再理解一下浮点数的原理。
0.1 + 0.2 的浮点数计算结果
看到这个结果表示震惊。
原因
在小数点后 4 位时,连续的二进制数,对应的十进制数却是不连续的,因此只能增加位数来尽可能近似的表示。
原理
0.1 和 0.2 是如何表示的?
根据前面的讲解,十进制 0.1 转为二进制小数,得到的是 0.0001100… (重复1100)这样一个循环二进制小数,使用 IEEE754 表示如下图:
同样的方法,0.2 用单精度浮点数表示是:0.20000000298023223876953125。所以,0.1 + 0.2 的结果是:0.300000004470348358154296875。
有趣的0.30000000000000004
竟然有这个域名