Задать вопрос
slarkevich
@slarkevich

Почему не совпадают результаты деления?

Вот есть учебный код вычисления корней уравнения. Все числа объявлены как double => я ожидаю, что в результате деления они будут вести себя как double и в итоге также получится double. Однако, будучи записаны в едином выражении, они ведут себя странно.
double A = 2;
double B = 5;
double C = 2;

double D = -1;
D = B*B - 4*A*C;

double x1 = 0;
double x2 = 0;

x1 = (-B + sqrt(D)) / 2*A;  // Ожидаю -0.5, получаю -2
x2 = (-B - sqrt(D)) / 2*A;  // Ожидаю -2, получаю -8

// С помощью дополнительных ухищрений все же получается -0.5 и -2
double tmp = sqrt(D);
double tmp1 = (-B + tmp);
double tmp2 = 2 * A;
x1 = tmp1 / tmp2;

tmp1 = (-B - tmp);
tmp2 = 2 * A;
x2 = tmp1 / tmp2;

То есть, как видите, x1 = (-B + sqrt(D)) / 2*A вычисляется неправильно, но если числитель и знаменатель предварительно поместить в отдельные переменные, то все нормально. Почему так?
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DaHek
Необходимо писать:
x1 = (-B + sqrt(D)) / (2*A);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы