浮点数的世界 0.1 + 0.2 = 0.30000000000000004?

简介: 今天看到一个有趣的新闻,浮点数计算导致的灾难,借此机会再理解一下浮点数的原理。

背景

今天看到一个有趣的新闻,浮点数计算导致的灾难,借此机会再理解一下浮点数的原理。

0.1 + 0.2 的浮点数计算结果

看到这个结果表示震惊。

439084f8f99d42db82fefe85b2e2d135.png

a7fa5fed8f4047f3ad758f4ea980a318.png

原因

在小数点后 4 位时,连续的二进制数,对应的十进制数却是不连续的,因此只能增加位数来尽可能近似的表示。

原理

0.1 和 0.2 是如何表示的?

根据前面的讲解,十进制 0.1 转为二进制小数,得到的是 0.0001100… (重复1100)这样一个循环二进制小数,使用 IEEE754 表示如下图:

4f3fe43897cb4eb09e0912e3e29b6f49.png

010c8b90212942c2b9c7b562223b055e.png

同样的方法,0.2 用单精度浮点数表示是:0.20000000298023223876953125。所以,0.1 + 0.2 的结果是:0.300000004470348358154296875。

有趣的0.30000000000000004

竟然有这个域名

参考

  1. 浮点数
目录
相关文章
|
21天前
|
C语言
|
8天前
|
数据挖掘 C++
C++中的科学计数法
C++中的科学计数法
16 0
|
11月前
|
存储 Java
详解浮点数
1.什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表示实数,但是到为止使用最广泛的是浮点表示法。浮点表示法,即用浮点数来表示实数,所谓浮点数,意思是小数点的位置不是固定的,是可以浮动的。浮点数采用IEEE 754这个标准作为统一的标准。该标准中严格定义个浮点数的表示格式、转化过程。 下面简单介绍一下IEEE 754标准。 IEEE 754的核心就是用科学计数法来表示实数,然后将表示结果转为二进制的方式,方便计算机存储。
292 0
|
12月前
|
编译器 C++
C++ 字符串转浮点数,包括整数、小数和科学记数法
C++ 字符串转浮点数,包括整数、小数和科学记数法
304 0
|
存储
5.6.1_浮点数的表示
计算机组成原理之浮点数的表示
237 0
5.6.1_浮点数的表示
06:浮点数向零舍入
06:浮点数向零舍入
175 0
|
存储
浮点数的表示方法
浮点数的表示方法
66 0
浮点数的表示方法
|
存储 开发者
浮点数| 学习笔记
快速学习浮点数。
79 0
定点数与浮点数简单解释
定点数 定点数:小数的位置是固定不变的。定点数又包括定点整数和定点小数。 定点小数:小数点隐含固定在最高数据位的左边,整数位则用于表示符号位,用于表示纯小数。
176 0
定点数与浮点数简单解释