MATLAB 数字精度

MATLAB digits precision

提问人:Ongky Denny Wijaya 提问时间:8/29/2021 更新时间:8/30/2021 访问量:330

问:

我有MATLAB代码:

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

结果是

a =
 
-0.5245755158634217064842071630254785076113576311088295152384038229263081153172372089356742060202648499
 
a=-0.5245755158634216600000000000000000000000000000000000000000000000000000000000000000000000000000000000

doublea =

   -0.5246

a=-0.5245755158634216600000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 

为什么如果我使用十进制精度最多只能达到 16 位,即使我使用 100 位精度? 另外,为什么如果我转换为 then 最多只能 16 位数字?fprintfadoublea

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

MATLAB 精度

评论

2赞 Hadi 8/29/2021
这应该解释:stackoverflow.com/a/4227530/3878321
3赞 Cris Luengo 8/29/2021
fprintf将数字转换为打印它。A 的精度约为 16 位十进制数字,它不能存储更多数字。如果需要更多,则需要使用 .用于显示其值(或用于转换为字符串并显示)。vpadoubledoublevpadispchar

答:

0赞 Morc 8/30/2021 #1

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

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

disp(['a = ' num2str(a,100)])

编辑:哈迪在评论中的链接有一个很好的解释。