Opérateur Modulo en Python
Ce n'modulo dans le morceau de code suivant faire?
from math import *
3.14 % 2 * pi
Comment calculer modulo un nombre à virgule flottante?
Vous devez vous connecter pour publier un commentaire.
Ce n'modulo dans le morceau de code suivant faire?
from math import *
3.14 % 2 * pi
Comment calculer modulo un nombre à virgule flottante?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous avez l'expression:
Cela signifie vraiment il existe un entier
n
qui faitc
aussi petit que possible, mais non négatif.À la main, vous pouvez juste soustraire
2
(ou ajouter2
si votre nombre est négatif), jusqu'à ce que le résultat final est le plus petit nombre positif possible:Aussi,
3.14 % 2 * pi
est interprété comme(3.14 % 2) * pi
. Je ne sais pas si vous avez voulu écrire3.14 % (2 * pi)
(dans les deux cas, l'algorithme est le même. Juste soustraire/ajouter jusqu'à ce que le nombre est le plus petit possible).(-123) % 10 == 7
en python3, tandis que le résultat est -3 dans d'autres langages tels que le C++. Parce que(-123) - (math.floor(-123/10)*10) == 7
En plus des autres réponses, le
fmod
de la documentation a des choses intéressantes à dire sur le sujet:fmod
. Merci!même normal modulo
3.14 % 6.28 = 3.14
, tout comme3.14%4 =3.14
3.14%2 = 1.14
(le reste...)%
a la même priorité que/
, ce qui est nettement moins que pow (même que des fois tout de même).3.14 % 2 * pi
est le même que(3.14 % 2) * pi == 1.14 * pi
plutôt que3.14 % (2 * pi)
.3.14 % ( 2*pi)
est cependant encore3.14
qui mon exemple était d'essayer de démontrer avec un nombre inférieur à 3.14 ... autant que je sache, la question n'était pas sur l'ordre des opérations, mais mehMême chose que vous attendez d'normal modulo .. par exemple
7 % 4 = 3
,7.3 % 4.0 = 3.3
Méfiez-vous de virgule flottante de précision questions.
vous devez utiliser fmod(a,b)
While abs(x%y) < abs(y) is true
mathématiquement, pourfloats
il peut ne pas être vrai numériquement en raison deroundoff
.Par exemple, et en supposant une plate-forme sur laquelle un
Python float
est unIEEE 754
nombre double précision, afin que-1e-100 % 1e100
ont le même signe que1e100
, le résultat calculé est-1e-100 + 1e100
, qui est numériquement égale à1e100
.Fonction
fmod()
dans le module math renvoie un résultat dont le signe correspond au signe de la premier argument au lieu de cela, et donc renvoie-1e-100
dans ce cas. L'approche la plus appropriée dépend de l'application.where x = a%b
est utilisé pour les entiers modulo