为什么大部分小数在计算机中是不精确的?

本质上是因为计算机不能精确计算无限的数。

但是这种无限,其实有多个层面。

第〇层:十进制是个有限小数,二进制也是个有限小数,比如 0.5, 0.25, 0.125, 0.375 等等小数。

第一层:十进制是一个有限小数,二进制是个无限小数。比如 0.2 这样的数。

第二层,十进制二进制都是无限小数,但可以表达为分数,并且分子分母都是有限的二进制数。

第三层,十进制二进制都是无限小数,不可以表达为分数,但可以通过特定的数学符号运算稳定获得。

第四层,无论在何种形态都是无限小数,无法表达为有限分数,也无法用有限的数学符号运算获得。

第四层的小数是几乎所有计算机程序都无法精确计算的。

第三层的小数,在一部分支持符号计算的数学工具内可以进行精确计算(直接以符号形态进行多项式计算)。在大部分普通应用中无法精确计算。

第二层的小数,在支持分数运算的数学工具内可以精确计算,在大部分普通应用内无法精确计算。

第一层的小数,使用一部分基于十进制运算的库可以精确计算,在大部分二进制计算的应用内无法精确计算。——原因也很明确,计算机无法精确计算无限,而这些数在二进制下是无限小数。

至于第〇层的小数,其实所有应用程序都能够精确计算,精确储存。——所有的整数其实都满足第零层规律,因此这些整数是能够精确的保存进一个浮点数的,当浮点数运算的前后结果都在第〇层以内时,这样的小数也是可以做到精确计算的。



所以,准确的说法应该是满足第〇层规律的小数可以直接使用CPU硬件指令直接进行精确计算,满足1,2,3,层规律的小数无法直接使用CPU指令精确计算,只能使用特殊的软件算法实现精确计算,但由于效率不高,它们仅仅用于数学工具类应用,常规应用并不使用类似的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值