Ce face math.nextafter() și math.ulp()
Numerele float nu sunt continue: între două valori vecine nu există nimic. nextafter(x, y) returnează valoarea reprezentabilă imediat de lângă x, în direcția lui y; cu steps (Python 3.12+) sare mai mulți pași.
ulp(x) („unit in the last place”) dă distanța dintre x și următorul float mai mare. Arată cât de fină este precizia la acea mărime.
Parametri
| Parametru | Descriere |
|---|---|
x, y |
Punctul de pornire și direcția. |
steps |
Opțional. Numărul de pași. |
Ce returnează
Un float.
Exemple
Exemplul 1: Precizia la diferite mărimi
import math
print(math.nextafter(1.0, 2.0), math.nextafter(1.0, 0.0))
print(math.ulp(1.0), math.ulp(1e16))
print(1e16 + 1 == 1e16)
print(math.nextafter(0.0, 1.0, steps=3))
Rezultat
1.0000000000000002 0.9999999999999999
2.220446049250313e-16 2.0
True
1.5e-323
Greșeli frecvente
- Te aștepți ca adunarea lui 1 la un
floatfoarte mare să schimbe valoarea. Peste 253,ulpdevine mai mare decât 1.
Comenzi înrudite
math.isclose(): Verifică dacă două numere zecimale sunt „suficient de apropiate” pentru a fi considerate egale.float(): Tipul numerelor cu zecimale; float() transformă un text sau un întreg în număr zecimal.math.frexp() și math.ldexp(): Descompun un număr zecimal în mantisă și exponent de 2, și îl recompun.