¿Qué hace el módulo en el siguiente fragmento de código?Operador de módulo en Python
from math import *
3.14 % 2 * pi
¿Cómo se calcula el módulo en un número de coma flotante?
¿Qué hace el módulo en el siguiente fragmento de código?Operador de módulo en Python
from math import *
3.14 % 2 * pi
¿Cómo se calcula el módulo en un número de coma flotante?
Cuando se tiene la expresión:
a % b = c
que significa realmente existe un entero n
que hace c
lo más pequeño posible, pero no negativo.
a - n*b = c
A mano, que sólo puede restar 2
(o añadir 2
si su número es negativo) una y otra vez hasta que el resultado final es el número positivo más pequeño posible:
3.14 % 2
= 3.14 - 1 * 2
= 1.14
Además, 3.14 % 2 * pi
es interpretado como (3.14 % 2) * pi
. No estoy seguro de si quería escribir 3.14 % (2 * pi)
(en cualquier caso, el algoritmo es el mismo. Basta con restar/agregar hasta que el número sea lo más pequeño posible).
mismo que un módulo normal de 3.14 % 6.28 = 3.14
, al igual que 3.14%4 =3.14
3.14%2 = 1.14
(el resto ...)
Orden o operaciones –
@MadPhysicist ¿qué? el orden de las operaciones del módulo es el mismo que el del pow ... ciertamente menos que el igual ... ¿cuál es el problema? –
'%' tiene la misma precedencia que '/', que es definitivamente menor que pow (igual que los tiempos). '3.14% 2 * pi' es lo mismo que' (3.14% 2) * pi == 1.14 * pi' en lugar de '3.14% (2 * pi)'. –
Además de las otras respuestas, la fmod
documentation tiene algunas cosas interesantes que decir sobre el tema:
math.fmod(x, y)
Return
fmod(x, y)
, tal como se define por la biblioteca de la plataforma C . Tenga en cuenta que la expresión Pythonx % y
no puede devolver el mismo resultado . La intención de la norma C es quefmod(x, y)
ser exactamente (matemáticamente; a precisión infinita) igual ax - n*y
para algunos número entero n tal que el resultado tiene el mismo signo quex
y magnitud menos deabs(y)
. Python'sx % y
devuelve un resultado con el signoy
en su lugar, y puede no ser exactamente computable para los argumentos flotantes. Para ejemplo,fmod(-1e-100, 1e100)
es-1e-100
, sino el resultado de Python de-1e-100 % 1e100
es1e100-1e-100
, que no se puede representar exactamente como un flotador, y rondas a la sorprendente1e100
. Por este motivo, generalmente se prefiere funciónfmod()
cuando se trabaja con flotadores, mientras que Python'sx % y
es preferible cuando se trabaja con enteros.
Nunca supe de 'fmod'. ¡Gracias! – Blender
Lo mismo que cabría esperar del módulo normal ... p. Ej. 7 % 4 = 3
, 7.3 % 4.0 = 3.3
Tenga cuidado con los problemas de precisión de coma flotante.
debe utilizar fmod (a, b) Mientras abs (x% y) < abs (y) es cierto matemáticamente, por flotadores que puede no ser cierto numéricamente debido a redondeo.Por ejemplo, y suponiendo una plataforma en la que un flotante de Python es un número de precisión doble IEEE 754, 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 en su lugar, y así devuelve -1e-100 en este caso. Qué enfoque es más apropiado depende de la aplicación.
donde se usa x = a% b para el módulo entero
prefiero la explicación x% y es x - (Math.floor (x/y) * y) que es lo mismo que lo que ha dicho pero las apariencias más comprensible para mí – sabbahillel
@sabbahillel Y es por eso que '(-123)% 10 == 7' en python3, mientras que el resultado es -3 en otros lenguajes como C++. Porque '(-123) - (math.floor (-123/10) * 10) == 7' –