Результаты C ++ с формулой, не соответствующей заданному значению - PullRequest
0 голосов
/ 05 февраля 2019

Почему следующие значения не равны друг другу?

0.37024025

и

(sqrt(2)*M_PI/3)*(1/4)

Я вижу значительное расхождение в своем решении, но все, что я сделал, это поместил число с формулойза этим.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы выполняете интегральное деление с 1/4, что приведет к 0, а не 0.25.Попробуйте добавить суффикс .0f или .0 для float или double соответственно.

0 голосов
/ 05 февраля 2019

Выражение (sqrt(2)*M_PI/3)*(1/4) имеет целочисленное деление.А именно, (1/4) всегда будет равным нулю, делая все выражение равным нулю, так как оно умножено на это.

(sqrt(2.0)*M_PI/3.0)*(1.0/4.0);

Немного ближе к тому, что вы хотели, но при сравнении удваивается точно, я быиспользуйте порог эпсилона и проверьте, достаточно ли они близки друг к другу, на основании этого:

bool cmp(double d1, double d2, double epsilon)
{
    return std::fabs(d1 - d2) < epsilon;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...