@versidue

Почему значение типа плавающей точки уменьшается?

0.1 в двоичном представлении имеет следующий вид:
0.10000000000000000555111512312578

double value = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;

std::cout << std::setprecision(32);
std::cout << value << "\n\n";


Почему результат 0.99999999999999988897769753748435?
Ведь число явно должно быть больше 1, а не меньше.
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Числа с плавающей точкой по определению приближенные. Каждая операция над подобными числами вносит свою погрешность в результат. Так что не стоит удивляться. В какую сторону и на сколько будет погрешность, думаю, это можно посчитать, но для этого надо копнуть глубже.
Для проверки можете просто вывести результат 2 сложений, потом трех, ... А так же проверьте результат умножения.
Тут много интересного можно для себя открыть.
Так же небезъинтересно сравнить результат одних и тех же вычислений над double и float.
Даже и не надейтесь в плавающей точке получить какой-то точный результат. Если нужна точность, то надо использовать фиксированную точку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Видимо, потому что 0,1 это не 0,1 и числа с плавающей точкой ничего не должны. Не говоря о том, что это выражение могло быть при компиляции сосчитано непонятно какими числами либо могло быть заменено на умножение, либо было заменено на умножение ещё при вычислении результата в момент компиляции...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы