Целочисленное разделение по сравнению с напольным фактором: почему этот неожиданный результат?

Оператор // «целочисленного деления» Python удивил меня сегодня:

 >>> math.floor(11/1.1) 10.0 >>> 11//1.1 9.0 

Документация гласит «(заполненное) частное от x и y». Итак, почему math.floor (11 / 1.1) равно 10, но 11 // 1.1 равно 9?

One Solution collect form web for “Целочисленное разделение по сравнению с напольным фактором: почему этот неожиданный результат?”

Поскольку 1.1 не может быть представлен в двоичной форме точно; приближение меньше, чем 1,1, поэтому результат деления слишком мал.

Попробуйте следующее:

В Python 2 введите в консоли:

 >>> 1.1 1.1000000000000001 

В Python 3.1 консоль отобразит 1.1 , но внутри нее все равно останется тот же номер.

Но:

 >>> 11/1.1 10.0 

Как указывает гниблер, это результат «внутреннего округления» в пределах доступных пределов точности поплавков. И, как указывает MYYN в своем комментарии, // использует другой алгоритм для вычисления результата деления пола, чем math.floor() , чтобы сохранить a == (a//b)*b + a%b а также возможное.

Используйте Decimal тип, если вам нужна эта точность.

  • Могу ли я перемещать virtualenv?
  • Найти max (и min) на интервале перемещения с помощью python
  • Как эффективно применять pos_tag_sents () к файловому кадру pandas
  • как я могу получить отсутствие красных пикселей и отсутствие чёрных пикселей в изображении PIL
  • Распаковывание обобщений
  • как я .decode ('string-escape') в Python3?
  • Рекурсивный ввод в Python 3.5+
  • Странная ошибка в python3 при большом вычислении int
  • Аутентификация в Django без базы данных
  • щелчок по ссылке через selenium в python
  • Python Как распечатать список списка
  • Python - лучший язык программирования в мире.