我最近非常严厉地发现,Matlab的dlmread
和dlmwrite
不会以double
精度存储数值。它会影响我的代码,我需要更精确地存储大数组。
A(非)工作示例:
pi1 = pi;
dlmwrite('pi',pi1);
pi2 = dlmread('pi');
pi1-pi2
ans =
-7.3464e-06
虽然我期望机器错误答案,但精确度为10 ^ -14。
我宁愿继续使用一个简单的函数dlmwrite
,但我会考虑其他解决方案。
由于
答案 0 :(得分:3)
使用函数的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');
结果如下:
test1.txt,包含3位小数2.869
test2.txt,包含5位小数2.86945
test3.txt,包含9位小数2.869454880
test4.txt,包含14位小数2.86945487961263