提问人:Ongky Denny Wijaya 提问时间:8/29/2021 更新时间:8/30/2021 访问量:330
MATLAB 数字精度
MATLAB digits precision
问:
我有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 位数字?fprintf
a
double
a
如果我想使用超过 16 位精度,会导致计算错误吗?如何解决?
答:
0赞
Morc
8/30/2021
#1
您是否尝试过将 num2str 或 vpa 与 disp 结合使用?
a1 = vpa(a,100);
disp(a1);
或
disp(['a = ' num2str(a,100)])
编辑:哈迪在评论中的链接有一个很好的解释。
评论
fprintf
将数字转换为打印它。A 的精度约为 16 位十进制数字,它不能存储更多数字。如果需要更多,则需要使用 .用于显示其值(或用于转换为字符串并显示)。vpa
double
double
vpa
disp
char