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

Matlab浮点运算疑问:myeps为何非零?基数为3时等式为何不成立?

问题分析:为什么3*(4/3-1)-1的计算结果不为0?

首先看Matlab中执行的代码:

myeps = abs(3*(4/3-1)-1);
format long e
eps_myeps = [eps ; myeps]

得到的输出:

eps_myeps =

     2.220446049250313e-16
     2.220446049250313e-16

1. 为什么myeps不为0?

这是二进制浮点数的精度限制导致的:

  • 计算机里的浮点数(比如Matlab用的双精度浮点数)是以二进制(基数2)存储的。
  • 分数4/3在二进制下是无限循环的小数(类似十进制里的1/3),无法被精确表示,存储时只能取近似值。
  • 所以4/3-1得到的不是精确的1/3,乘以3之后也无法得到精确的1,最后减1就会得到一个极小的误差值——这个值正好等于双精度浮点数的机器精度eps。

2. 为什么基数为3时等式成立,基数为2时不成立?

  • 当基数是3时,4/3可以表示为有限的三进制小数:1.1_3(也就是1 + 1/3),能被精确存储。
  • 此时计算4/3-1会得到精确的1/3,乘以3得到精确的1,减1结果就是0。
  • 但我们的计算机用的是二进制(基数2)浮点数系统,4/3无法精确表示,自然就会产生误差,等式也就不成立了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:20:37