3.4 fpectl -- Controllo delle eccezioni nei numeri in virgola mobile

Disponibilità: Unix.

Molti computer elaborano le operazioni con numeri in virgola mobile in conformità con il cosiddetto standard IEEE-754. Su un qualsiasi computer, alcune operazioni in virgola mobile producono risultati che non possono venire espressi con normali valori in virgola mobile. Per esempio, provate:

>>> import math
>>> math.exp(1000)
inf
>>> math.exp(1000) / math.exp(1000)
nan

(L'esempio precedente funziona su molte piattaforme. La DEC Alpha può essere una eccezione). ``Inf'' è un valore speciale, non numerico, nello standard IEEE-754 che sta per ``infinito'' mentre ``nan'' significa ``non un numero'' (``not a number''). Notate che, aldilà del risultato non numerico, nulla di speciale accade quando chiedete a Python di procedere con questi calcoli. Questo infatti è il comportamento predefinito nello standard IEEE-754, e se a voi funziona, smettete pure di leggere questo paragrafo.

In alcune circostanze, sarebbe meglio sollevare un'eccezione ed interrompere il processo nel punto in cui si rileva l'operazione errata. Il modulo fpectl è da usare in queste situazioni. Fornisce il controllo sui numeri in virgola mobile per l'hardware di molte case produttrici, consentendo all'utente la possibilità di abilitare la generazione di un SIGFPE ogni volta che dovrebbe venire sollevata una eccezione IEEE-754 come Division by Zero, Overflow, oppure Invalid Operation. Insieme ad un paio di macro wrapper, inserite nel codice C comprendente il sistema Python in uso, SIGFPE viene intercettata e convertita nell'eccezione Python FloatingPointError.

Il modulo fpectl definisce le seguenti funzioni e può sollevare l'eccezione data:

turnon_sigfpe( )
Abilita la generazione di SIGFPE, ed imposta un appropriato gestore di segnale.

turnoff_sigfpe( )
Resetta al valore predefinito la gestione delle eccezioni sui numeri in virgola mobile.

exception FloatingPointError
Dopo che è stata eseguita turnon_sigfpe(), un'operazione con numeri in virgola mobile che solleva una delle eccezioni IEEE-754, Division by Zero, Overflow, oppure Invalid Operation, solleverà invece questa eccezione standard di Python.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.