dlmwrite / dlmread 的精度问题 [重复]
Posted
技术标签:
【中文标题】dlmwrite / dlmread 的精度问题 [重复]【英文标题】:Precision issues with dlmwrite / dlmread [duplicate] 【发布时间】:2016-01-02 14:03:03 【问题描述】:我最近非常严厉地发现,Matlab 的 dlmread
和 dlmwrite
不会以 double
的精度存储数值。它会影响我的代码,我需要更精确地存储大数组。
一个(非)工作示例:
pi1 = pi;
dlmwrite('pi',pi1);
pi2 = dlmread('pi');
pi1-pi2
ans =
-7.3464e-06
虽然我希望得到机器错误的答案,但准确度为 10^-14。
我宁愿继续使用dlmwrite
这样的简单函数,但我会考虑其他解决方案。
谢谢
【问题讨论】:
RTFM:The default precision is 5 significant digits and it supports C-style format strings。作为替代方案,dlmwrite
是低级 fwrite
函数的包装器。
【参考方案1】:
您可以使用函数的precision
属性获得更精确的结果。检查这个例子:
format long
S = pi * rand
S =
2.869454879612631
dlmwrite('test1.txt',S,'precision','%10.3f');
dlmwrite('test2.txt',S,'precision','%10.5f');
dlmwrite('test3.txt',S,'precision','%10.9f');
dlmwrite('test3.txt',S,'precision','%2.14f');
结果如下:
带有 3 位小数的 test1.txt 2.869
带有 5 位小数的 test2.txt 2.86945
带有9位小数的test3.txt 2.869454880
14 位小数的test4.txt 2.86945487961263
【讨论】:
以上是关于dlmwrite / dlmread 的精度问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章