Fonction math.nextafter() de Python
Dans les calculs en virgule flottante, comprendreles nombres à virgule flottante adjacentsLa relation entre eux est très importante. Les nombres à virgule flottante dans les ordinateurs sont discrets, et il existe un intervalle minimal entre deux nombres à virgule flottante adjacents.
math.nextafter()est une fonction introduite dans Python 3.9, utilisée pour renvoyer la valeur après avoir avancé d'un nombre spécifié de pas en virgule flottante de x vers y.
Signification du mot: nextafterCela signifie « après le suivant ».
Syntaxe de base et paramètres
Format de syntaxe
import math math.nextafter(x, y[, steps])
Description du paramètre
- x: nombre à virgule flottante de départ
- y: direction cible
- steps(facultatif) : nombre de pas, par défaut 1
Valeur de retour
Renvoie le nombre à virgule flottante après avoir avancé de steps pas depuis x dans la direction de y
Exemples
Exemple 1 : Obtenir des nombres à virgule flottante adjacents
Exemple
import math
next_val = math.nextafter(1.0, math.inf)
print(f"Le prochain nombre à virgule flottante après 1.0 : {next_val}")
print(f"Différence : {next_val - 1.0}")
prev_val = math.nextafter(1.0, -math.inf)
print(f"\n"Le nombre à virgule flottante précédant 1.0 : {prev_val}")
print(f"Différence : {1.0 - prev_val}")
next_val = math.nextafter(1.0, math.inf)
print(f"Le prochain nombre à virgule flottante après 1.0 : {next_val}")
print(f"Différence : {next_val - 1.0}")
prev_val = math.nextafter(1.0, -math.inf)
print(f"\n"Le nombre à virgule flottante précédant 1.0 : {prev_val}")
print(f"Différence : {1.0 - prev_val}")
Sortie :
1.0 的下一个浮点数: 1.0000000000000002 差值: 2.220446049250313e-16 1.0 的前一个浮点数: 0.9999999999999999 差值: 1.1102230246251565e-16
Exemple 2 : paramètre steps
Exemple
import math
print("Avancer de 10 pas :", math.nextafter(1.0, math.inf, 10))
print("Nombre de pas négatif :", math.nextafter(1.0, -math.inf, -5))
print("Avancer de 10 pas :", math.nextafter(1.0, math.inf, 10))
print("Nombre de pas négatif :", math.nextafter(1.0, -math.inf, -5))
Sortie :
前进 10 步: 1.0000000000000007 负数步数: 0.9999999999999996
Exemple 3 : Valeurs spéciales
Exemple
import math
print("Infini :", math.nextafter(math.inf, 0))
print("Après 0 :", math.nextafter(0.0, 1.0))
print("Zéro négatif :", math.nextafter(-0.0, 1.0))
print("Infini :", math.nextafter(math.inf, 0))
print("Après 0 :", math.nextafter(0.0, 1.0))
print("Zéro négatif :", math.nextafter(-0.0, 1.0))
Sortie :
无穷大: 1.7976931348623157e+308 0 之后: 5e-324 负零: 5e-324
Exemple 4 : Calculer ULP
Exemple
import math
for x in [1.0, 2.0, 100.0]:
ulp = math.nextafter(x, math.inf) - x
print(f"ULP({x}) = {ulp}")
for x in [1.0, 2.0, 100.0]:
ulp = math.nextafter(x, math.inf) - x
print(f"ULP({x}) = {ulp}")
Sortie :
ULP(1.0) = 2.220446049250313e-16 ULP(2.0) = 4.440892098500626e-16 ULP(100.0) = 2.8421709430404007e-14
Notes
- Cette fonction n'est disponible qu'à partir de Python 3.9+
- Le paramètre steps est également nouveau dans Python 3.9
- Peut être utilisé pour comprendre les limitations de précision des nombres à virgule flottante
Autres extensions
Module math de Python