Деление двойного числа на целое

Я столкнулся с проблемой при делении double на int. Фрагмент кода:

  double db = 10;
  int fac = 100;
  double res = db / fac;

Значение res равно 0.10000000000000001 вместо 0.10.

Кто-нибудь знает, в чем причина этого? Я использую cc для компиляции кода.


person hardcoder    schedule 16.06.2010    source источник
comment
Дублирование МНОГИХ вопросов. См. тег плавающей точности.   -  person dan04    schedule 16.06.2010
comment
возможный дубликат Почему 99,99/100 = 0,9998999999999999   -  person abelenky    schedule 16.06.2010


Ответы (3)


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

person sml    schedule 16.06.2010

ЦП использует двоичное представление чисел. Ваш результат не может быть точно представлен в двоичном формате. 0.1 в двоичном формате — это 0.00011001100110011... ЦП усекает его в определенный момент и получает некоторую ошибку округления.

person Rotsor    schedule 16.06.2010

double — это оператор с плавающей запятой, он не предоставляет точных значений. Найдите в Google операторы точности и операций с плавающей запятой.

person Meiscooldude    schedule 16.06.2010