matlab - 机器 Epsilon : MatLab vs Maple

标签 matlab numerical-methods scientific-computing maple

我正在学习单精度和 double 的机器 epsilon,并比较不同程序的值。例如,在matlab中有如下代码:

>> format long
>> eps

给出 2.220446049250313e-16。但是 Maple 中的以下代码:

> readlib(Maple_floats);
> evalhf(DBL_EPSILON);
> quit;

给出-15 .2220446049250314 10(其中 -15 是指数)。

两个程序的输出略有不同。 Maple 似乎从 3 向上舍入到 4。造成这种差异的原因是什么?

最佳答案

请注意,Maple(和 Matlab)向您展示了硬件 double float 的 radix-10 表示。

所以也许您应该更关心底层硬件 double 值。

> restart:
> kernelopts(version);

       Maple 2015.0, X86 64 LINUX, Feb 17 2015, Build ID 1022128

> X:=Vector(1,datatype=float[8]): # double precision container
> p:=proc(x) x[1]:=DBL_EPSILON; end proc:
> evalhf(p(X)):

> lprint(X[1]);
HFloat(.222044604925031308e-15)

> printf("%Y\n", X[1]);                                       
3CB0000000000000

根据文档,最后的结果是“格式化为与字节顺序无关的 IEEE 十六进制转储格式(16 个字符宽)”。

那么,当您以等效格式printfeps 时,Matlab 会为您提供什么?快速网络搜索似乎表明它会给出 3CB0000000000000 以及您看到的 2.220446049250313e-16。

换句话说:硬件 double 表示在两个系统中是相同的。它们以 10 为基数表示不同。请注意, Maple 显示的以 10 为基数的值有 18 位小数。超过 15 位的数字是某种人工制品,存储后通常内部存储的数字可以正确往返,以便双向重复转换。请注意,硬件 double 与 15 到 16 位小数有关。因此,如果您想比较这两个系统,您可以(并且很可能应该)比较存储的硬件 double 值,而不是第 15 位之后的以 10 为基数的表示。

关于matlab - 机器 Epsilon : MatLab vs Maple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381398/

相关文章:

python - 将用-v7.3(HDF5)保存的Matlab稀疏矩阵加载到Python中并对其进行操作

matlab - 在 Matlab 中保存 Kinect 深度图像?

algorithm - 多项式最小不动点的高效计算

python - 如何在 python 中权衡具有高斯分布的 2 个变量的函数?

python - 在矩阵上使用 scipy.fsolve

python - Python 上的 LMFIT : TypeError: only size-1 arrays can be converted to Python scalars

matlab - MATLAB 直方图中条形的颜色

Matlab:如何根据均值和标准差绘制正态曲线

math - 用函数式语言进行科学数学?

python - 绘制对数分级网络度分布