cout << -1/2
оценивает 0
-1/2
оценивает -1
,Почему это так?
Целочисленное деление в C ++ округляет в сторону 0, а в Python — в -infinity.
Люди, занимающиеся этими вещами абстрактно, склонны считать, что движение к отрицательной бесконечности имеет больше смысла (это означает, что она совместима с функцией по модулю, как определено в математике, а не %
имея несколько забавный смысл). В языках программирования существует традиция округлять до 0 — это не было изначально определено в C ++ (следуя примеру C в то время), но в итоге C ++ (и C) определили его таким образом, копируя Fortran.
Для 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
это раунд в сторону минус бесконечности. Сбрасывание дроби — это раунд к нулю.
Из документов Python (выделено мое):
Операторы / (Division) и // (Floor Division) дают частное от своих аргументов. Числовые аргументы сначала преобразуются в общий тип. Простое или длинное целочисленное деление дает целое число того же типа; результатом является математическое деление с функцией «пол», примененной к результату.
Функция floor округляет число до ближайшей к отрицательной бесконечности, следовательно, -1.
Я не уверен насчет Python, но в C ++ integer / integer = integer, поэтому в случае -1/2 это -0,5, который автоматически округляется до целого числа, и, следовательно, вы получите ответ 0.
В случае Python может быть система использовала функцию floor для преобразования результата в целое число.