Я работаю в C++ и имею проблемы с точностью чтения в двойной
input_file>>temp_double;
число в файле примерно 1234.567, но когда оно читается, оно читается как 1234.56699999999. Итак, как я могу заставить его читать, как есть в файле, я использую количество десятичных знаков в более поздних функциях, поэтому мне нужно, чтобы это было правильно. числа в файле варьируются от 3-5 знаков после запятой
float
и double
хранят свои данные с использованием стандарта IEEE, который хранит бит знака, показатель экспоненты и дробное значение. Большинство десятичных значений не будут точно точными при сохранении из-за преобразования базовой части 10 в базовую часть дробной части.
Также, математически, 1234.566999999999999.... = 1234.567
Как говорили другие, double
не может точно представлять множество десятичных значений. Он сохраняет свои данные в двоичном формате и, в конце концов, заканчивается. Многие числа, которые могут быть представлены точно в десятичной форме, имеют бесконечные представления в двоичном формате.
Если вам нужно точное представление, посмотрите, например, Boost :: Multiprecision.