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.