浮点数的世界 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. 浮点数
目录
相关文章
|
JavaScript 前端开发 Python
【python自动化】Playwright基础教程(三)定位操作
【python自动化】Playwright基础教程(三)定位操作
668 0
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
2346 2
|
12月前
|
云安全 人工智能 自然语言处理
|
12月前
|
Kubernetes 安全 Devops
「迁移急救包」全云平台无缝迁移云效实操手册
阿里云云效是国内领先的一站式DevOps平台,提供代码全生命周期管理、智能化交付流水线及精细化研发管控,支持多种开发场景。本文详细介绍了从其他平台(如Coding)向云效迁移的完整方案,包括代码仓库、流水线、制品仓库及项目数据的迁移步骤,帮助用户实现高效、安全的平滑迁移,提升研发效率与协作能力。
975 29
|
10月前
|
数据采集 编解码 算法
ASTER L2 Surface Emissivity V003
ASTER L2表面发射率V003产品基于TES算法,提供5个热红外波段的90米分辨率陆地发射率数据。依托MERRA-2等高精度大气输入,提升反演精度,并支持通过Earthdata获取。注意2024年11月28日至2025年4月15日TIR数据存在缺口。
249 0
|
存储 Go 开发者
在Go中对切片/数组求和的多种方法
在Go中对切片/数组求和的多种方法
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
开发工具 git

热门文章

最新文章