¿Por qué se evalúa -1/2 a 0 en C ++, pero -1 en Python?

  • C ++ : cout << -1/2 evalúa a 0
  • Python : -1/2 evalúa a -1 .

¿Por qué es este el caso?

La división entera en C ++ se redondea hacia 0, y en Python, se redondea hacia el infinito.

Las personas que tratan con estas cosas en abstracto tienden a sentir que el rumbo hacia el infinito negativo tiene más sentido (eso significa que es compatible con la función de módulo tal como se define en matemáticas, en lugar de tener un significado un tanto divertido). La tradición en los lenguajes de progtwigción es redondear hacia 0, esto no se definió originalmente en C ++ (siguiendo el ejemplo de C en ese momento), pero finalmente C ++ (y C) lo definió de esta manera, copiando Fortran.

Para C ++, de esta referencia: http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/

Es más fácil pensar que el operador de división tiene dos “modos” diferentes. Si ambos operandos son enteros, el operador de división realiza la división de enteros. La división entera elimina cualquier fracción y devuelve un valor entero.

Por lo tanto, -1/2 rendiría -0.5 con la fracción bajada , dando un rendimiento de 0 .

Como lo indicó @SethMMorton, la regla de Python es floor , que produce -1 . Se describe aquí: http://docs.python.org/2/reference/expressions.html .

Dicho en los términos que mencionó @MikeGraham, floor es una ronda hacia menos infinito. Dejar caer la fracción es una ronda hacia cero.

De los documentos de Python (énfasis mío):

Los operadores / (división) y // (división de piso) producen el cociente de sus argumentos. Los argumentos numéricos se convierten primero a un tipo común. La división entera simple o larga produce un entero del mismo tipo; el resultado es el de la división matemática con la función ‘piso’ aplicada al resultado .

La función de piso se redondea al número más cercano al infinito negativo, por lo tanto, -1.

No estoy seguro de python pero en C ++ integer / integer = integer, por lo tanto, en el caso de -1/2 es -0.5, que se redondea automáticamente a entero y, por lo tanto, obtiene la respuesta 0. En el caso de Python, el sistema puede usar la función de piso para convertir el resultado en entero.