math.nextafter() și math.ulp() în Python

Numere și matematică Python 3.9+ (steps: 3.12+)

Următorul număr float reprezentabil spre o direcție și distanța până la el.

Sintaxă
math.nextafter(x, y, *, steps=None)
math.ulp(x)

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 float foarte mare să schimbe valoarea. Peste 253, ulp devine 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.