Точность чтения в файле

0

Я работаю в C++ и имею проблемы с точностью чтения в двойной

input_file>>temp_double;

число в файле примерно 1234.567, но когда оно читается, оно читается как 1234.56699999999. Итак, как я могу заставить его читать, как есть в файле, я использую количество десятичных знаков в более поздних функциях, поэтому мне нужно, чтобы это было правильно. числа в файле варьируются от 3-5 знаков после запятой

Теги:
precision

2 ответа

0
Лучший ответ

float и double хранят свои данные с использованием стандарта IEEE, который хранит бит знака, показатель экспоненты и дробное значение. Большинство десятичных значений не будут точно точными при сохранении из-за преобразования базовой части 10 в базовую часть дробной части.

Также, математически, 1234.566999999999999.... = 1234.567

2

Как говорили другие, double не может точно представлять множество десятичных значений. Он сохраняет свои данные в двоичном формате и, в конце концов, заканчивается. Многие числа, которые могут быть представлены точно в десятичной форме, имеют бесконечные представления в двоичном формате.

Если вам нужно точное представление, посмотрите, например, Boost :: Multiprecision.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню