Вопрос в MATLAB о сравнении значений с пи - PullRequest
0 голосов
/ 26 мая 2011

Я хочу найти пи в MATLAB, и когда я сравниваю его с пи, уже воплощенной в MATLAB. Поэтому, когда я пишу

while(p~=pi)             

цикл кажется бесконечным, потому что он продолжает проверять все цифры, которые есть у MATLAB pi.

Итак, когда я написал:

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

ответ, естественно, был нет. Поэтому я хочу найти способ сохранить только пять цифр после точки и проверить это, проверить на пи = 3,14159.

Может кто-нибудь помочь?

Ответы [ 3 ]

6 голосов
/ 26 мая 2011
if abs(p-pi) <= 1e-5
  disp yes;
else
  disp no;
end

См. этот ответ переполнения стека для деталей.

0 голосов
/ 27 мая 2011

Для сравнения чисел с плавающей запятой следует использовать eps. что-то вроде

если abs (p-pi) <= eps .... то же самое </p>

Я также видел 2 * eps вместо eps. Но вышеупомянутое - лучший способ сравнить числа с плавающей запятой. В вашем случае это становится

в то время как abs (p-pi)> 2 * eps ..... конец

- Насер

0 голосов
/ 26 мая 2011

Посмотрите на функцию round2 на Обмен файлами .Это позволяет вам округлить до определенного количества десятичных знаков.Например, для вашего примера:

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