Почему -1/2 оценивается как 0 в C ++, а -1 в Python?

  • C ++: cout << -1/2 оценивает 0
  • питон: -1/2 оценивает -1,

Почему это так?

3

Решение

Целочисленное деление в C ++ округляет в сторону 0, а в Python — в -infinity.

Люди, занимающиеся этими вещами абстрактно, склонны считать, что движение к отрицательной бесконечности имеет больше смысла (это означает, что она совместима с функцией по модулю, как определено в математике, а не % имея несколько забавный смысл). В языках программирования существует традиция округлять до 0 — это не было изначально определено в C ++ (следуя примеру C в то время), но в итоге C ++ (и C) определили его таким образом, копируя Fortran.

8

Другие решения

Для C ++, из этой ссылки: http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/

Про оператора деления проще всего думать как о
разные «режимы». Если оба операнда являются целыми числами, деление
Оператор выполняет целочисленное деление. Целочисленное деление отбрасывает любое
дроби и возвращает целочисленное значение.

Таким образом, -1/2 даст -0.5 с дробью упал, получая 0,

Как указано @SethMMorton, правило Python floor, который дает -1, Это описано здесь: http://docs.python.org/2/reference/expressions.html.

Положите в терминах, которые упоминал @MikeGraham, floor это раунд в сторону минус бесконечности. Сбрасывание дроби — это раунд к нулю.

1

Из документов Python (выделено мое):

Операторы / (Division) и // (Floor Division) дают частное от своих аргументов. Числовые аргументы сначала преобразуются в общий тип. Простое или длинное целочисленное деление дает целое число того же типа; результатом является математическое деление с функцией «пол», примененной к результату.

Функция floor округляет число до ближайшей к отрицательной бесконечности, следовательно, -1.

1

Я не уверен насчет Python, но в C ++ integer / integer = integer, поэтому в случае -1/2 это -0,5, который автоматически округляется до целого числа, и, следовательно, вы получите ответ 0.
В случае Python может быть система использовала функцию floor для преобразования результата в целое число.

-1
По вопросам рекламы [email protected]