Je connais Python //
s'arrondit vers l'infini négatif et en C++ /
est tronqué, arrondi vers 0.
Et voici ce que je sais jusqu'à présent :
|remainder|
-12 / 10 = -1, - 2 // c++
-12 // 10 = -2, + 8 # python
12 / -10 = -1, 2 // c++
12 // -10 = -2, - 8 # python
12 / 10 = 1, 2 //both
12 // 10 = 1, 2
-12 / -10 = 1, - 2 //both
= 2, + 8
C++:
1. m%(-n) == m%n
2. -m%n == -(m%n)
3. (m/n)*n + m%n == m
python:
1. m%(-n) == -8 == -(-m%n)
2. (m//n)*n + m%n == m
Mais pourquoi Python //
choisir de tourner vers l'infini négatif ? Je n'ai pas trouvé de ressources expliquant cela, mais seulement trouvé et entendu des gens le dire vaguement : "pour des raisons mathématiques" .
Par exemple, dans Pourquoi -1/2 est évalué à 0 en C++, mais -1 en Python ? :
Les gens qui traitent de ces choses dans l'abstrait ont tendance à penser que qu'il est plus logique de se diriger vers l'infini négatif ( cela signifie que c'est compatible avec la fonction modulo telle qu'elle est définie en mathématiques, plutôt que de plutôt que % ayant une signification quelque peu étrange ).
Mais je ne vois pas que le C++'s /
n'étant pas compatible avec la fonction modulo. En C++, (m/n)*n + m%n == m
s'applique également.
Quelle est donc la raison (mathématique) pour laquelle Python choisit d'arrondir à l'infini négatif ?
Je pense que je devrais mettre ça Voici l'ancien article du blog de Guido van Rossum sur le sujet. dans le corps de la question au cas où des personnes manqueraient les commentaires.