【问题标题】:Question in MATLAB about comparing values to piMATLAB中关于将值与pi进行比较的问题
【发布时间】:2011-05-26 15:55:11
【问题描述】:

我想在 MATLAB 中找到 pi,然后将它与 MATLAB 中已经包含的 pi 进行比较。 所以当我写

while(p~=pi)             

循环似乎是无穷无尽的,因为它不断测试 MATLAB pi 拥有的所有数字。

所以当我写的时候:

p=3.1416;
if p==pi
  disp('yes');
else
  disp('no');
end

答案自然是否定的。所以我想找到一种方法在该点之后只保留五位数字并用它进行测试,测试 pi=3.14159。

谁能帮忙?

【问题讨论】:

    标签: matlab pi


    【解决方案1】:
    if abs(p-pi) <= 1e-5
      disp yes;
    else
      disp no;
    end
    

    详情请参阅this Stack Overflow answer

    【讨论】:

    • 我最后也是这么做的!谢谢
    【解决方案2】:

    查看File Exchange 上的函数round2。它允许您四舍五入到特定的小数位数。例如。以您为例:

    if round2(p,1e-5) == round2(pi,1e-5),
        disp('yes');
    end
    

    【讨论】:

    • 请注意,round2 实际上并没有四舍五入到指定的小数位数。 round2(1.23,.1) 实际上产生数字 1.20000000000000017763568394002504646778106689453125
    • 问题当然是在matlab中不能准确地表示数字1.2。始终注意浮点精度的限制。
    • 啊,好点。但是如果 pi 和 p 相同,那么与 round2 最接近的 FP 值肯定也应该相同吗?
    • 你的推理还有一个缺陷。一个人可以有两个不同的数字,round2 将发送到不同的结果,但它们确实比容差更接近。>> x = [1.199 1.201]; >> round2(x,0.00725) ans = 1.1963 1.2035
    • 该示例完全取决于您输入的舍入值。如果你做了 >> T = [1.199 1.201] >> round2(T,0.01) ans = 1.2000 1.2000。如果你再比较答案,你会得到: >> ans(1)==ans(2) ans = 1
    【解决方案3】:

    要比较浮点数,应该使用 eps。类似的东西

    如果 abs(p-pi)

    我还看到用 2*eps 代替 eps。但以上是比较浮点数的更好方法。在你的情况下,它变成了

    而 abs(p-pi)>2*eps ...... 结束

    --纳赛尔

    【讨论】:

    • 从技术上讲,EPS 的最准确用法是将您正在比较的值的大小传递给它。不带参数调用 EPS 将返回从 1.0 到下一个最大双精度数的距离(约 2.2204e-016),但 eps(pi) 将为您提供两倍大的浮点相对精度(约 4.4409e-016) .
    • 好点。这就是我提到的一些使用 2*eps 的原因。但我现在看到你建议做 eps(magnitude) 比做 2*eps 更好。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多