我有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在评论中的链接有一个很好的解释。