MATLAB为啥给出了最小数(浮点精度限)

matlab求尽量别邀,matlab默认在双精度下进行计算,我们知道数在计算机中并不是连续而是离散存在的,如果连续存在,光1/3(也就是0.333...)的位数就有无限多个了,而内存和硬盘的空间都是有限的,用有限的空间去表示无限的数显然不是明智之举,所以科学家们想了个办法,把连续的的数进行一定规则的离散化,满足我们实际需要的精度就可以了,这套规则叫E**,我一时犯浑想不起来了(根据下面蒋剑楠的评论,我原想表达的是IEEE,但我记得这是一系列的标准,我刚查了下,其中最常用的似乎是IEEE 754)。而且我必须指出你问的这个问题是有问题的(为何表达起来如此拗口。。),eps并不是指最小的数,而是指1离他下一个最近的数的间距的大小,对应Mathematica就是$MachineEpsilon,最小实数在matlab里好像记得是realmin(很久没用这玩意了,如果说错了欢迎拍砖)。但是请注意,在这套规则里,这些离散数的间距并不是一个恒定值,数的绝对值越小,他离旁边的数的间距就越小,用Mathematica把数的间距大小可视化如下Needs;Plot, {x, -10, 10}, Epilog -\u0026gt; {Red, InfiniteLine}, Ticks -\u0026gt; {Range, Automatic}] 【MATLAB为啥给出了最小数(浮点精度限)】 MATLAB为啥给出了最小数(浮点精度限)

红线与曲线的交点纵坐标就是你指的eps大小了,只是据我所知,这图像好像有两处是不精确的0~1的时候间距是线性在增加,而没有那个小平台2上面对对应的应该是像4上面的那种垂直上升的直线,而不是在线性增加,而且由于Ulp=2*Ulp=4*Ulp,我们可以推测在1到2、2到4和4到8...这些区间上能表示的浮点数个数是相同的。下面评论还有人问到,既然浮点数不精确,会有误差,我们怎么不用分数来表示呢?1/3用一个1、一个3和一根分数线表示不就可以了?很有道理,上数值分析的时候我也问过我老师同样的问题,不过她好像没有回答我,当时下面的同学都在笑我,按我目前的理解,这并不是不可能的,比如我画图所使用的软件叫Mathematica,我怀疑它就是这么做的(这只是我个人的理解),但可想而知的是一个1、一个3和一根分数线组成的并不是一个现成的数,它们靠一定的关系组成一个类似数的对象用来参与运算,由于不是像浮点数一样直接参与运算,所以通常效率比用浮点数运算的效率要差,这种零误差的精确计算方式叫做符号运算,matlab也有相应的引擎。
■网友
在循环语句或者一些判断语句中,需要用到最小数条件的,直接 if xxx\u0026lt;eps可以判断,

■网友
新手一枚在matlab和mathematica里有理数都可以精确表示的matlab:sym(小数)mathematica直接用分数表示或者Rationalize他们采用符号计算,尽可能没有误差。同时计算精度也可以改的mathematica可以指定WorkingPrecisionmatlab好像是vpa你说的大概只是double的极限


    推荐阅读