求使realmax+n不产生溢出的最大数值n
求解使
realmax + n不溢出的最大n值 核心原理
MATLAB中的realmax('double')是IEEE 754双精度浮点数能表示的最大有限数,其值为(2 - 2^-52) × 2^1023。对于这个量级的数,双精度的最小可分辨增量(机器精度)是eps(realmax) = 2^971——这是唯一能让realmax产生数值变化的最小正数,但realmax + eps(realmax)会直接溢出为inf。
测试代码的问题分析
你使用的eps('double')是双精度在数值1附近的机器精度(值为2^-52),远小于eps(realmax)。此时realmax + eps('double')的结果仍等于realmax,不会溢出,但这只是因为双精度无法分辨这么小的增量,并非n达到了“不溢出的最大值”。
结论
不存在绝对意义上“最大的正数n”使得realmax + n不溢出:
- 所有小于
eps(realmax)的正数n,realmax + n的结果始终等于realmax(无溢出),但这类n没有上限——你总能找到一个更大的n' < eps(realmax)满足条件。 - 当
n ≥ eps(realmax)时,realmax + n会直接溢出为inf。
如果要找最大的可表示双精度浮点数满足条件,这个数是eps(realmax) - eps(eps(realmax)),但本质上任何小于eps(realmax)的可表示浮点数加realmax都不会溢出,结果均为realmax。
内容的提问来源于stack exchange,提问作者stryx
相关产品推荐
相关产品推荐

