MATLAB数字精度



我有MATLAB代码:

clear;
clc;
syms x;
f=log(x)*sin(x^2);
a=vpa(subs(f,x,2),100)
fprintf('a=%.100fn',a);
doublea=double(a);
fprintf('a=%.100fn',doublea);

,结果是

a =

-0.5245755158634217064842071630254785076113576311088295152384038229263081153172372089356742060202648499

a=-0.5245755158634216600000000000000000000000000000000000000000000000000000000000000000000000000000000000
doublea =
-0.5246
a=-0.5245755158634216600000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 

为什么如果我使用fprintf,即使我使用100位精度,十进制精度也只有16位?另外,为什么如果我将a转换为double,那么a只有16位数字?

如果我想使用超过16位的精度,它会导致计算错误吗?如何解决这个问题?

您是否尝试过将num2str或vpa与disp结合使用?

a1 = vpa(a,100);
disp(a1);

disp(['a = ' num2str(a,100)])
编辑:Hadi在评论中的链接有一个很好的解释。

相关内容

  • 没有找到相关文章

最新更新