Operador de modulo en Python

¿Qué hace el módulo en el siguiente fragmento de código?

from math import * 3.14 % 2 * pi 

¿Cómo calculamos el módulo en un número de punto flotante?

Cuando tengas la expresión:

 a % b = c 

Realmente significa que existe un entero n que hace que c sea ​​lo más pequeño posible, pero no negativo.

 a - n*b = c 

De forma manual, solo puede restar 2 (o sumr 2 si su número es negativo) una y otra vez hasta que el resultado final sea el número positivo más pequeño posible:

  3.14 % 2 = 3.14 - 1 * 2 = 1.14 

Además, 3.14 % 2 * pi se interpreta como (3.14 % 2) * pi . No estoy seguro de que quisieras escribir 3.14 % (2 * pi) (en cualquier caso, el algoritmo es el mismo. Solo resta / sum hasta que el número sea lo más pequeño posible).

Además de las otras respuestas, la documentación de fmod tiene algunas cosas interesantes que decir sobre el tema:

math.fmod(x, y)

Devuelve fmod(x, y) , como lo define la biblioteca C de la plataforma. Tenga en cuenta que la expresión de Python x % y puede no devolver el mismo resultado. La intención del estándar C es que fmod(x, y) sea ​​exactamente (matemáticamente; con una precisión infinita) igual a x - n*y para algún entero n tal que el resultado tenga el mismo signo que x y una magnitud menor que abs(y) . Python’s x % y devuelve un resultado con el signo de y lugar, y puede que no sea computable exactamente para los argumentos flotantes. Por ejemplo, fmod(-1e-100, 1e100) es -1e-100 , pero el resultado de -1e-100 % 1e100 es 1e100-1e-100 , que no se puede representar exactamente como un flotador, y se redondea a la sorprendente 1e100 . Por esta razón, la función fmod() generalmente se prefiere cuando se trabaja con flotadores, mientras que x % y Python se prefiere cuando se trabaja con enteros.

igual que un módulo normal 3.14 % 6.28 = 3.14 , al igual que 3.14%4 =3.14 3.14%2 = 1.14 (el rest …)

Lo mismo que se esperaría del módulo normal … por ejemplo, 7 % 4 = 3 , 7.3 % 4.0 = 3.3

Cuidado con los problemas de precisión de punto flotante.

debes usar fmod (a, b)

While abs(x%y) < abs(y) is true matemáticamente, para floats puede no ser numéricamente debido al roundoff .

Por ejemplo, y suponiendo que una plataforma en la que un Python float es un número IEEE 754 doble precisión, para que -1e-100 % 1e100 tenga el mismo signo que 1e100 , el resultado calculado es -1e-100 + 1e100 , que es numéricamente exactamente igual a 1e100 .

La función fmod() en el módulo matemático devuelve un resultado cuyo signo coincide con el signo del primer argumento y, por lo tanto, devuelve -1e-100 en este caso. El enfoque más adecuado depende de la aplicación.

where x = a%b se usa para el módulo entero