You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB生成数值序列时的数值精度异常原因咨询

为什么4.1/0.1的结果会被近似为40?

先看你做的测试:

[input] 3.9/0.1 : 4.1/0.1
[output] 39    40

加了round()之后结果就符合预期了:

[input] 3.9/0.1 : round(4.1/0.1)
[output] 39    40   41

这问题的核心是浮点数的二进制存储精度限制:

  • 十进制里的0.1转换成二进制是无限循环小数,计算机无法精确存储,只能保存一个近似值。
  • 4.1同样无法用二进制精确表示,实际存储的是一个略小于4.1的近似值。
  • 计算4.1/0.1时,本质是两个近似值做除法,得到的结果会略小于41(比如实际可能是40.99999999999999)。
  • 直接输出时的隐式取整会截断小数部分,所以得到40;而round()函数会根据数值的接近程度做四舍五入,把这个接近41的近似值判定为41。

另外提一句,3.9/0.1能得到39只是巧合——3.9的近似值除以0.1的近似值刚好非常接近39,截断后得到准确结果,但本质同样是浮点数精度导致的近似计算。

内容的提问来源于stack exchange,提问作者Steven Ding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:24:23