Почему измерения в программе С++ неточные? - Компьютерные вопросы

Вопрос Почему измерения в программе С++ неточные?

Регистрация
8 Сен 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
875a8375f91de049494d6073098e8a2f_473ec2dfafec06abb1e89effbdc74b39.png

875a8375f91de049494d6073098e8a2f_7b0cb3fda8fb62784c14475d4dae47c9.png

задачу и мой код прикрепил в фотографиях

вопрос - почему при использовании типа переменных float измерения неточные? я вроде не ухожу в большое кол-во цифр после запятой, а наоборот, умножаю. при использовании double результат становится точным. можно ли на таком скелете программы сделать точный вывод через float?
 
Регистрация
29 Мар 2013
Сообщения
66
Репутация
0
Спасибо
1
Монет
0
число 500.1 не может быть представлено в виде конечной двоичной дроби
при использовании double результат тоже будет неточным, просто, возможно, в вывод ошибка не попадёт
 
Регистрация
12 Июл 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Это побочный эффект того, как данные с плавающей запятой представляются в ЦП. По этой причине может происходить некоторая потеря точности, а некоторые операции с плавающей запятой могут давать непредвиденный результат. Причины такого поведения могут быть следующими. Двоичное представление десятичного числа может быть неточным. Несоответствие типов используемых чисел (например, float и double). Для решения этой проблемы большинство программистов либо гарантируют, что значение больше или меньше необходимого, либо используют библиотеку двоично-десятичного кода (BCD), которая будет обеспечивать точность.
 

ttQ

Capitan

ttQ

Capitan
Регистрация
4 Июл 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Тип float целесообразно использовать в случаях когда значения небольшие, необходимая точность после разделителя два-три знака, а данных тьма-тьмущая. Например, при работе с базами данных.

Если точность после разделителя нужна высокая либо вещественные числа имеют очень большие значения и точность является определяющим характером. Следует использовать сторонние библиотеки длинной арифметики.

Во всех остальных случаях следует использовать тип double.
 
Сверху Снизу