Skip to content

Valori massimi e minimi di un float in Python

Python

In Python, il tipo di numero a virgola mobile float è una rappresentazione a 64 bit di un numero a virgola mobile a precisione doppia, equivalente a double in altri linguaggi di programmazione come C.

Questo articolo spiega come ottenere e controllare l’intervallo (valori massimo e minimo) che float può rappresentare in Python.

In molti ambienti, la gamma è la seguente.

-1.7976931348623157e+308 <= f <= 1.7976931348623157e+308

In questo articolo vengono descritti i seguenti contenuti.

  • float è un numero a virgola mobile a precisione doppia in Python
  • Informazioni sul funzionamento:sys.float_info
  • Il valore massimo che può rappresentare:sys.float_info.max
  • Il valore minimo che può rappresentare
    • Il valore minimo negativo
    • Il valore normalizzato positivo minimo:sys.float_info.min
    • Il valore denormalizzato positivo minimo

Nota che non c’è limite per il tipo intero int in Python3.

Il tipo float ha anche un valore speciale, inf, che rappresenta l’infinito.

float è un numero a virgola mobile a precisione doppia in Python

In Python, i numeri vengono generalmente implementati utilizzando il linguaggio C double, come nella documentazione ufficiale.

I numeri in virgola mobile sono generalmente implementati usando double in C;
Tipi incorporati: documentazione di Python 3.9.7

A meno che non utilizzi un’implementazione speciale che non sia CPython, puoi presumere che venga utilizzato double. Puoi verificare la precisione utilizzando sys.float_info di seguito.

Il numero a virgola mobile a precisione doppia doppia è una rappresentazione di numeri a virgola mobile a 64 bit.

In molti altri linguaggi di programmazione, come C, i numeri a virgola mobile a precisione singola sono usati come float ei numeri a virgola mobile a precisione doppia come double, ma in Python la doppia precisione è chiamata float e non esiste un tipo a precisione singola .

Si noti che è possibile specificare in NumPy il tipo con il numero, ad esempio float32, float64.

Informazioni sul funzionamento:sys.float_info

Usa sys.float_info per ottenere informazioni su float.

Il modulo sys è incluso nella libreria standard, quindi non è richiesta alcuna installazione aggiuntiva.

import sys

print(sys.float_info)
# sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

print(type(sys.float_info))
# <class 'sys.float_info'>

Puoi ottenere il valore di ogni elemento come attributo, come sys.float_info..

print(sys.float_info.max)
# 1.7976931348623157e+308

Consulta la documentazione ufficiale per un elenco di elementi e le relative informazioni. Ciascun elemento corrisponde a una costante in virgola mobile definita nel file di intestazione standard float.h del linguaggio C.

attributo macro float.h spiegazione
epsilon DBL_EPSILON differenza tra 1,0 e il valore minimo maggiore di 1,0 rappresentabile come float
scavare DBL_DIG numero massimo di cifre decimali che possono essere rappresentate fedelmente in un float
mant_dig DBL_MANT_DIG float precision: il numero di cifre in base alla radice nel significato di un float
max DBL_MAX float finito positivo massimo rappresentabile
max_exp DBL_MAX_EXP numero intero massimo e tale che radix**(e-1) sia un float finito rappresentabile
max_10_exp DBL_MAX_10_EXP numero intero massimo e racconto che 10**e sia nell’intervallo dei float finiti rappresentabili
min DBL_MIN galleggiante normalizzato positivo minimo rappresentabile
min_exp DBL_MIN_EXP numero intero minimo e tale che radix**(e-1) sia un float normalizzato
min_10_exp DBL_MIN_10_EXP numero intero minimo e tale che 10**e sia un float normalizzato
radice FLT_RADIX radice di rappresentazione dell’esponente
torni FLT_ROUNDS costante intera che rappresenta la modalità di arrotondamento utilizzata per le operazioni aritmetiche. Ciò riflette il valore della macro FLT_ROUNDS di sistema all’avvio dell’interprete

Il valore massimo che può rappresentare:sys.float_info.max

Puoi ottenere il valore massimo che float può rappresentare con sys.float_info.max. e+XXX significa 10 alla potenza di XXX. + è facoltativo.

print(sys.float_info.max)
# 1.7976931348623157e+308

I valori che superano questo valore vengono trattati come inf, che significa infinito. Vedere il seguente articolo per i dettagli su inf.

print(1.8e+308)
# inf

print(type(1.8e+308))
# <class 'float'>

In esadecimale, è il seguente.

print(sys.float_info.max.hex())
# 0x1.fffffffffffffp+1023

Il valore minimo che può rappresentare

Il valore minimo negativo

Il valore negativo minimo che può rappresentare è sys.float_info.max con -. I valori inferiori a questo vengono trattati come infinito negativo.

print(-sys.float_info.max)
# -1.7976931348623157e+308

print(-1.8e+308)
# -inf

print(type(-1.8e+308))
# <class 'float'>

Il valore normalizzato positivo minimo:sys.float_info.min

È possibile ottenere il valore normalizzato positivo minimo con sys.float_info.min.

print(sys.float_info.min)
# 2.2250738585072014e-308

Un numero normalizzato è un valore la cui parte esponente non è 0. sys.float_info.min è come segue in esadecimale.

print(sys.float_info.min.hex())
# 0x1.0000000000000p-1022

Il valore denormalizzato positivo minimo

sys.float_info.min è il valore normalizzato positivo minimo.

I valori che la loro parte esponente è 0 e la loro parte mantissa non è 0 sono chiamati numeri denormalizzati.

Il valore minimo positivo denormalizzato può essere convertito da una stringa esadecimale come segue:

print(float.fromhex('0x0.0000000000001p-1022'))
# 5e-324

print(format(float.fromhex('0x0.0000000000001p-1022'), '.17'))
# 4.9406564584124654e-324

Un valore inferiore a questo è considerato 0,0.

print(1e-323)
# 1e-323

print(1e-324)
# 0.0

In Python 3.9 o versioni successive, puoi ottenere il valore denormalizzato positivo minimo passando 0.0 alla funzione math.ulp() appena aggiunta.

import math

print(math.ulp(0.0))
# 5e-324

print(format(math.ulp(0.0), '.17'))
# 4.9406564584124654e-324