查看“为什么0.1+0.2!=0.3”的源代码
←
为什么0.1+0.2!=0.3
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:计算机基础]] == 0.1+0.2=0.30000000000000004? == 使用常用的语言计算“0.2+0.1”的时候,结果不是“0.3”,而是“0.30000000000000004”,而不同的“0.1+0.6”的结果却是“0.7”: 首先,计算机中是使用二进制表示对应的数值的,十进制整数转二进制采用“除2取余,逆序排列”的方法得到,而小数的转换采用“乘2取整,顺序排列”的方法,如下: # 用2乘十进制小数,得到积; # 将积的整数部分取出,再用2乘余下的小数部分,又得到一个积; # 重复以上两部,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 示例: <syntaxhighlight lang="xml"> 0.625 x 2 = 1.25 整数部分 1 0.25 x 2 = 0.5 整数部分 0 0.5 x 2 = 1 整数部分 1 0.625 的二进制为 0.101 </syntaxhighlight> 但是,并非所有小数都能被表示为二进制,如0.1: <syntaxhighlight lang="xml"> 0.1 x 2 = 0.2 整数部分 0 0.2 x 2 = 0.4 整数部分 0 0.4 x 2 = 0.8 整数部分 0 0.8 x 2 = 1.6 整数部分 1 0.6 x 2 = 1.2 整数部分 1 0.2 x 2 = 0.4 整数部分 0 0.4 x 2 = 0.8 整数部分 0 0.8 x 2 = 1.6 整数部分 1 0.6 x 2 = 1.2 整数部分 1 ... </syntaxhighlight> 所以 0.1 的二进制为 0.00011001100110011...,在计算机中并不能被精确表示。 所以,计算机的单精度、双精度数都是采用近似值表示,只是二者的精度有所不同(32位、64位): 0.1 的双精度浮点数的二进制为:0.00011001100110011001100110011001100110011001100110011001 0.2 的双精度浮点数的二进制为:0.00110011001100110011001100110011001100110011001100110011 二者相加等于:0.01001100110011001100110011001100110011001100110011001100 转换为十进制:0.30000000000000004 所以 0.1+0.2 != 0.3,而是一个近似值。如果要进行高精度计算,应该使用类似“'''BigDecimal'''”的数据类型。
返回至“
为什么0.1+0.2!=0.3
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息