首先,在MATLAB中没有do关键字这样的东西,所以从你的代码中消除它.另外,不要将
eps用作实际变量.这是MATLAB中预定义的函数,它计算
machine epsilon,这也是您尝试计算的函数.通过创建一个名为eps的变量,您可以隐藏实际函数,因此MATLAB中需要使用它的任何其他函数都会出现意外行为,而这不是您想要的.
使用别的东西,比如macheps.此外,您的算法略有不正确.您需要在while循环中检查1.0(macheps / 2),而不是1.0 macheps.
换句话说,这样做:
macheps = 1;
while 1.0 + (macheps/2) > 1.0
macheps = macheps / 2;
end
这应该给你2.22 x 10 ^ { – 16},如果你在命令提示符下键入eps,它与MATLAB一致.要仔细检查:
>> format long
>> macheps
macheps =
2.220446049250313e-16
>> eps
ans =
2.220446049250313e-16
奖金
如果你不知道,机器epsilon是由浮点运算引起的相对误差的上限.换句话说,这将是真实浮点数与计算机上计算的最大差值之间的最大差异,因为用于存储浮点数的位数有限.
如果你还记得,浮点数不可避免地在你的计算机上表示为二进制位(或几乎任何数字).就IEEE 754 floating point standard而言,MATLAB假设所有数值都是double类型,它表示浮点数为64位.显然,您可以通过显式转换为其他类型来覆盖此行为.对于IEEE 754浮点标准,对于双精度类型数字,有52位代表数字的小数部分.