Eccezione del punto galleggiante C ++ perché e cos'è?

Eccezione del punto galleggiante C ++ perché e cos'è?
Eccezione a punta mobile si verifica quando un software cerca di eseguire un'operazione impropria su un numero numerico. Questo tipo di eccezione si verifica quando un utente tenta di eseguire operazioni non valide, come la divisione per zero, la divisione di un numero negativo per un numero pari, prendendo la radice quadrata di un numero negativo o l'overflow di un calcolo che supera il limite del doppio tipo di dati.

In C ++, il "Sigfpe" Il gestore del segnale gestisce il file Eccezioni del punto galleggiante (FPES). Quando un utente tenta di svolgere le attività menzionate, questo gestore di segnale viene chiamato. Una volta che il gestore del segnale è intervenuto, stampa un messaggio di errore in uscita standard e interrompe il programma.

Perché si verificano eccezioni a virgola mobile?

Eccezioni del punto galleggiante Può verificarsi a causa di errori di programmazione o quando un programma tenta di elaborare un valore che non è. Ad esempio, se un programma cerca di dividere un numero intero per zero o se un programma cerca di prendere la radice quadrata di un numero negativo, a Eccezione del punto galleggiante si verificherà. Inoltre, alcuni Eccezioni a punta mobile può verificarsi a causa di elaborazioni del processore.

Molti fattori, come operazioni inappropriate, underflow, overflow, divisione per zero e precisione, potrebbero provocare un Eccezione a punta mobile. Copriremo questi argomenti uno per uno in questa sezione.

1: operazione illegale

Quando un utente dimentica di esprimere un'operazione o l'operazione non ha alcun valore matematico, il programma non riesce a eseguire a causa di un'operazione non valida. Ciò include calcoli come la radice quadrata e il logaritmo di numeri negativi, ad esempio. Sebbene sia possibile prendere la radice quadrata di un numero negativo quando si tratta di numeri complessi, non esiste un meccanismo basato su computer per esprimerlo.

Inoltre, un'operazione errata risulterà se un software esegue un virgola mobile operazione su una posizione solo interi. Ciò è dovuto a una mancata corrispondenza tra l'operazione che si sta tentando di eseguire i dati (operazione a virgola mobile) e i dati memorizzati (intero).

2: divisione zero

UN Eccezione a punta mobile viene lanciato se si tenta di dividere un numero intero di zero. La stessa cosa si verifica quando si tenta di dividere per NAN o Infinito. Ecco alcuni esempi: 1/0, log (0).

3: Overflow

Quando un'operazione restituisce un valore al di fuori del suo intervallo previsto, si verifica un'eccezione di overflow. Il valore è più o inferiore al valore rappresentabile più piccolo, secondo questa affermazione.

4: Underflow

Il flusso si verifica quando un calcolo produce un risultato inferiore a quello che un tipo di dati può contenere.

5: inesatto

Quando il risultato di un'operazione differisce da ciò che era previsto, questo è noto come un'eccezione inesatta. Quando l'operazione viene eseguita con precisione non legata e un intervallo esponente, ciò si verifica.

In alcuni casi, tali situazioni possono essere gestite con grazia. Ad esempio, quando un programma tenta di dividere un numero per zero, è generalmente preferibile restituire un messaggio di errore e terminare con grazia il programma invece di consentire al programma di arrestare.

#includere
#includere
Utilizzo dello spazio dei nomi std;
Float Div (float num, float den)

if (den == 0)
lancia runtime_error ("Errore matematico: ha tentato di dividere per 0 \ n");

return (num / den);

int main ()

float num, denom, risultato;
num = 10;
denom = 0;
Tentativo
risultato = div (num, denom);
cout << "The quotient is " << result << endl;

catch (runtime_error & e)
cout << "Exception occurred" << endl << e.what();

In questo codice, il Div La funzione è chiamata dal blocco di prova all'interno di principale. Se la Denom non è uguale a zero, IL Div La funzione restituisce il quoziente; Se lo è, a Eccezione di errore di runtime viene lanciato. Prima di chiamare la funzione con l'oggetto di errore di runtime E, il blocco catch intercetta questa eccezione e stampa il testo "Errore". Viene utilizzato per identificare l'eccezione. L'eccezione standard di classe, che è descritta in stdexcept file di intestazione, ha una funzione virtuale chiamata Che cosa(). Il messaggio "Errore matematico: tentato di dividere per 0" è stampato di conseguenza.

Produzione

Impedire Eccezioni del punto galleggiante In C ++, è essenziale controllare tutti i parametri passati alle funzioni, utilizzare formati appropriati e testare esplicitamente i divisori per valori zero. Inoltre, quando si utilizzano doppi tipi di dati, è importante ingrandire l'intervallo del tipo di dati se il programma richiede risultati aritmetici più grandi.

Conclusione

Eccezioni del punto galleggiante in C ++ sono causati da operazioni non valide sui valori numerici e possono influire sulla capacità del programma di eseguire correttamente. Per evitare tali errori, è importante controllare tutti i parametri passati alle funzioni e utilizzare i tipi di dati appropriati. Inoltre, è utile catturare Eccezioni del punto galleggiante.