【科普】为什么在二进制下 0.1+0.2!=0.3 ?
  • 板块学术版
  • 楼主WeiXc
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/4/18 20:25
  • 上次更新2024/4/18 20:40:33
查看原帖
【科普】为什么在二进制下 0.1+0.2!=0.3 ?
1016450
WeiXc楼主2024/4/18 20:25

本人第一次写帖子,请多包涵和谅解!

前言

如果你的旁边有一台正在运行着Windows7操作系统的电脑,不妨跟着我一起做以下操作:打开win7内置的计算器,计算4的平方根,然后再将计算结果减去2,你就会惊奇地发现,最终的计算结果居然不是0,而是 -1.068281969439142e-19 !那这是为什么呢?事情肯定不会这么简单……

为什么会这样?

在十进制中,我们经常会遇到一些分数表示“不准确”的情况,例如1/3=0.333333…… ,1/6=0.166666…… ,形如这些分数,它们所指的数都比较“模糊”,而像1/2,1/4这些分数就比较“干净利落”。刚刚我们在win7计算器中遇到的问题就和分数表达得“干净利落”有关。 在二进制中,唯一的质因数是 2,因此只能“干净利落”地 表示分母只有2作为质因数的分数。在二进制中, 1/2、1/4、1/8 都可以干净地表示为小数,而 1/5 或 1/10 将是一个拥有重复数字的小数。所以win7中计算器的这个错误就是因为4的平方根表达“不准”的问题,导致它减去一个准确的数(2)时,发生了这样的错误。文章标题的问题也是类似,因为0.1 和 0.2(1/10 和 1/5)两个数字表达不准确,在二进制中,0.1+0.2的答案是0.30000000000000004。

验证

你可以尝试在C++和Python3中运行以下示例代码。

  • C++
#include <iomanip>
#include <iostream>

int main() {
  std::cout << std::setprecision(17) << 0.1 + 0.2;
}
  • Python3
print(.1 + .2)

以上程序的输出结果均为0.30000000000000004

~ ~全文完~ ~

相关资料:https://0.30000000000000004.com/

如有错误请指出

2024/4/18 20:25
加载中...