【问题标题】:Controlling the precision of floating point number in matlab在matlab中控制浮点数的精度
【发布时间】:2013-08-20 09:04:30
【问题描述】:

我正在划分一个数字,比如说

x=2;
y=1/3;
z=x*y;

我希望 z 是 0.66666666666667,即小数点后的 14 个数字,y 也是如此。现在,当我这样做时,我只会得到0.6667。如何将答案扩展为精确的 14 位精度?

【问题讨论】:

  • 尝试在命令行中输入format long g
  • 它给了我小数点后 15 位数字。我想要 14。如何做到这一点
  • 然后四舍五入到 14 位

标签: matlab precision floating


【解决方案1】:

如果只是显示数字,您可以使用sprintf 函数

str = sprintf('%.14f', pi); % print PI with exactly 14 digits after decimal point
disp(str);

fprintf 只需一行:

fprintf('%.14f', pi);

fprintf 用于写入文件,但如果没有给出文件标识符,则将字符串结果打印到屏幕上。

【讨论】:

    【解决方案2】:

    如果您确实希望该数字具有该精度,则四舍五入到 14 位,如下所示:

    format long g
    
    x=2;
    y=1/3;
    z=x*y;
    round(z*1e14)/1e14
    
    ans =      0.66666666666667
    

    如果只是显示,请使用 Deve 的 sprintf 解决方案。

    【讨论】:

      【解决方案3】:

      你可以在matlab中输入:

      digits(10)
      

      它为您提供更高的浮点精度,或者也

      digits(20)
      

      例如:

       a=1/3
      ans = 0.3333
      digits(10)
       vpa(a)
       ans= 0.3333333333
      

      通过在命令窗口中输入 doc 来搜索 matlab 的帮助,然后搜索:digits

      【讨论】:

      • 哎呀,我的意思是数字(10)
      • 如果您只需要显示少量数字,则使用可变精度算术模块是一种向后(无罪)显示更多精度数字的方法。如果您需要更多位数的精度,请仅使用 vpa。在这种特殊情况下,此处不需要vpa
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多