【问题标题】:MATLAB digits precisionMATLAB 数字精度
【发布时间】:2021-10-28 13:55:09
【问题描述】:

我有 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
>> 

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

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

【问题讨论】:

  • 这应该解释一下:stackoverflow.com/a/4227530/3878321
  • fprintfvpa 数字转换为 double 以打印它。 double 有大约 16 个十进制数字的精度,它不能存储更多的数字。如果您需要更多,您需要使用vpa。使用disp 显示其值(或使用char 转换为字符串并显示)。

标签: matlab precision


【解决方案1】:

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

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

或者

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

编辑:Hadi 在 cmets 中的链接有很好的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2016-12-09
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多