【发布时间】:2015-11-29 15:05:38
【问题描述】:
我正在学习单精度和双精度的机器 epsilon,并比较来自不同程序的值。例如在matlab中如下代码:
>> format long
>> eps
给出 2.220446049250313e-16。但 Maple 中的以下代码:
> readlib(Maple_floats);
> evalhf(DBL_EPSILON);
> quit;
给出 -15 .2220446049250314 10(其中-15是指数)。
两个程序的输出略有不同。 Maple 似乎从 3 向上舍入到 4。造成这种差异的原因是什么?
【问题讨论】:
-
在 Maple 中,
evalhf(DBL_EPSILON)给出.222044604925031308 10^-15,这与 Matlab 中的eps相同。那么有什么问题呢? -
您在进行哪种计算,其中 30+ 浮点数真的很重要? :~
-
它旨在证明关于机器 epsilon 的一点,我不明白。
-
您使用的是什么版本的 Maple?是不是很老了? readlib 命令应该是不必要的。再次尝试使用它。我得到 2.22044604925031308e-16,即,我得到的比你多两位。
-
@NKN 这可能比最初怀疑的要多。请注意,对于两个数字的相加(这是整个计算,例如
nPebblesOnBeach + handfulOfPebbles),精度为 10^-16 可能没问题。此外,在大多数情况下,像area = pi*r^2;这样的乘法可能只需要较低的精度。但是,假设您有一个大矩阵。这个也可能条件不好。参见例如cond(rand(N))。在这里,您肯定会关心机器 epsilon 是 10^-16 还是(可能有点粗糙,但是......)10^-10。
标签: matlab numerical-methods scientific-computing maple