浮点数的世界 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. 浮点数
目录
相关文章
|
6月前
|
C语言
|
14天前
|
JavaScript 前端开发 Java
浮点数介绍
【10月更文挑战第21天】
25 1
|
2月前
|
存储 Python
整数和浮点数。
整数和浮点数。
23 7
|
3月前
|
存储
浮点数
【8月更文挑战第29天】浮点数。
66 1
浮点数中的零
Julia 提供三种浮点类型:Float16(半精度,16位),Float32(单精度,32位)和 Float64(双精度,64位)。浮点数包含正零和负零,两者相等但二进制表示不同,如 `bitstring` 函数所示:0.0 为 "000...000",而 -0.0 为 "100...000"。
|
存储
5.6.1_浮点数的表示
计算机组成原理之浮点数的表示
325 0
5.6.1_浮点数的表示
|
存储 Java
详解浮点数
1.什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表示实数,但是到为止使用最广泛的是浮点表示法。浮点表示法,即用浮点数来表示实数,所谓浮点数,意思是小数点的位置不是固定的,是可以浮动的。浮点数采用IEEE 754这个标准作为统一的标准。该标准中严格定义个浮点数的表示格式、转化过程。 下面简单介绍一下IEEE 754标准。 IEEE 754的核心就是用科学计数法来表示实数,然后将表示结果转为二进制的方式,方便计算机存储。
346 0
|
编译器 C++
C++ 字符串转浮点数,包括整数、小数和科学记数法
C++ 字符串转浮点数,包括整数、小数和科学记数法
604 0
|
存储
浮点数的表示方法
浮点数的表示方法
170 0
浮点数的表示方法
06:浮点数向零舍入
06:浮点数向零舍入
214 0