dlmwrite / dlmread的精度问题

时间:2016-01-02 14:03:04

标签: matlab double precision writefile

我最近非常严厉地发现,Matlab的dlmreaddlmwrite不会以double精度存储数值。它会影响我的代码,我需要更精确地存储大数组。

A(非)工作示例:

pi1 = pi;
dlmwrite('pi',pi1);
pi2 = dlmread('pi');
pi1-pi2

ans =

-7.3464e-06

虽然我期望机器错误答案,但精确度为10 ^ -14。

我宁愿继续使用一个简单的函数dlmwrite,但我会考虑其他解决方案。

由于

1 个答案:

答案 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