Значение константы с плавающей запятой различается в зависимости от того, как она объявлена ​​C ++ (Xcode IDE) - PullRequest
0 голосов
/ 03 декабря 2011

Я работаю через C ++ Primer Plus, использую Xcode в качестве своей IDE, и одно из упражнений требует присвоения значения 0.0254 символической константе (преобразование дюймов в метры). Проблема в том, что когда я объявляю константу, я получаю значение 0.0253999997. Я объявляю константу, как показано ниже.

#include <iostream>
const float METERS_PER_INCH = .0254;

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Это проблема ошибки округления из-за хранения чисел с плавающей точкой в ​​системе счисления с основанием 2 (подумайте о том, как мы не можем написать 1/3 без округления в нашей системе счисления с основанием 10). Это приводит к небольшим ошибкам округления, подобным тем, которые вы видите, когда сохраняете неосновные числа 2.

Решение состоит в том, чтобы использовать целые числа или библиотеку bignum (я предлагаю GNU Библиотека Multiple Precision ). Библиотека bignumber использует целые числа для точного хранения произвольных чисел точности.

0 голосов
/ 03 декабря 2011

Не волнуйтесь, ваш Mac в порядке.

Проблема в том, что компьютеры не могут точно отображать числа с плавающей запятой и двойники, поэтому вы видите это там.

Почему сравнение double и float приводит к неожиданному результату?

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

странный вывод по сравнению с плавающей точкой с литералом float

Google твой друг!

...