Wyjątek zmiennoprzecinkowy C ++ Dlaczego i co to jest?

Wyjątek zmiennoprzecinkowy C ++ Dlaczego i co to jest?
Wyjątek zmiennoprzecinkowy występuje, gdy oprogramowanie próbuje wykonać niewłaściwą operację na liczbie numerycznej. Ten typ wyjątku występuje, gdy użytkownik próbuje wykonać nieprawidłowe operacje, takie jak podział zero, podział liczby ujemnej według liczby parzystej, biorąc pierwiastek kwadratowy liczby ujemnej lub przepełnienie obliczeń, które przekracza granicę Podwójny typ danych.

W C ++, „Sigfpe” Handler sygnału obsługuje Wyjątki punktu zmiennoprzecinkowego (FPES). Gdy użytkownik próbuje wykonać wymienione zadania, wywołuje ten moduł obsługi sygnału. Po interweniowaniu obsługi sygnału drukuje komunikat o błędzie do standardowego wyjścia i zatrzymuje program.

Dlaczego występują wyjątki zmiennoprzecinkowe?

Wyjątki punktu zmiennoprzecinkowego może wystąpić z powodu błędów programowania lub gdy program próbuje przetworzyć wartość, która jest poza specyfikacją. Na przykład, jeśli program próbuje podzielić liczbę całkowitą przez zero, lub jeśli program próbuje wziąć pierwiastek kwadratowy o liczbie ujemnej, a Wyjątek zmiennoprzecinkowy wystąpi. Ponadto niektóre Wyjątki zmiennoprzecinkowe może wystąpić z powodu błędnych wykryć procesora.

Wiele czynników, takich jak niewłaściwe działanie, niedopuszczanie, przepełnienie, podział zero i dokładność, może skutkować Wyjątek zmiennoprzecinkowy. W tej sekcji omówimy te argumenty jeden po drugim.

1: Nielegalna operacja

Gdy użytkownik zapomina wyrazić operację lub operacja nie ma wartości matematycznej, program nie wykonuje się z powodu nieprawidłowej operacji. Obejmuje to na przykład obliczenia, takie jak pierwiastek kwadratowy i logarytm liczb ujemnych. Chociaż możliwe jest przyjęcie pierwiastka kwadratowego liczby ujemnej w przypadku liczb złożonych, nie ma mechanizmu komputerowego, który to wyraża.

Dodatkowo niepoprawna operacja spowoduje spowodowanie, że oprogramowanie zostanie wykonane Punkt zmiennoprzecinkowy Działanie w lokalizacji tylko całkowitej. Wynika to z niedopasowania między operacją, którą próbujesz przeprowadzić dane (operacja zmiennoprzecinka) a zapisanymi danymi (liczba całkowita).

2: Zero Division

A Wyjątek zmiennoprzecinkowy jest rzucany, jeśli spróbujesz podzielić liczbę całkowitą przez zero. To samo dzieje się, gdy próbujesz podzielić przez Nan lub nieskończoność. Oto kilka przykładów: 1/0, log (0).

3: Przepełnienie

Gdy operacja zwraca wartość poza oczekiwanym zakresem, zdarza się wyjątek przepełnienia. Według tego stwierdzenia wartość jest więcej lub niższa niż najmniejsza wartość reprezentatywna.

4: Underflow

Underflow ma miejsce, gdy obliczenie daje wynik mniejszy niż to, co może utrzymać typ danych.

5: niedokładny

Kiedy wynik operacji różni się od przewidywanego, jest to znane jako niedokładny wyjątek. Gdy operacja jest wykonywana z nieograniczoną precyzją i zakresem wykładników, występuje.

W niektórych przypadkach takie sytuacje można obsługiwać z wdziękiem. Na przykład, gdy program próbuje podzielić liczbę przez zero, ogólnie preferowane jest zwrócenie komunikatu o błędzie i z wdziękiem zakończenie programu zamiast umożliwienia awarii programu.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
float div (float num, float den)

if (den == 0)
THRIME Runtime_error („Błąd matematyki: próba podzielenia przez 0 \ n”);

return (num / den);

int main ()

float num, denom, wynik;
num = 10;
denom = 0;
próbować
wynik = div (num, denom);
Cout << "The quotient is " << result << endl;

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

W tym kodzie Div funkcja jest wywoływana przez blok próbny wewnątrz główny. Jeśli Denom nie jest równe zero, Div funkcja zwraca iloraz; Jeśli tak, Wyjątek błędu środowiska wykonawczego Jest rzucony. Przed wywołaniem funkcji z obiektem błędu czasu wykonywania blok złapania przechwytuje ten wyjątek i drukuje tekst "Wystąpił błąd". Służy do identyfikacji wyjątku. Standardowy wyjątek klasy, który jest opisany w stdExcept plik nagłówka, ma funkcję wirtualną o nazwie Co(). Wiadomość „Błąd matematyki: próba podzielenia przez 0” w rezultacie jest drukowane.

Wyjście

Aby zapobiec Wyjątki punktu zmiennoprzecinkowego W C ++ konieczne jest sprawdzenie wszystkich parametrów przekazywanych do funkcji, użycie odpowiednich formatów i wyraźnie testowania dzielników pod kątem wartości zerowych. Ponadto przy użyciu podwójnych typów danych ważne jest powiększenie zakresu typu danych, jeśli program wymaga większych wyników arytmetycznych.

Wniosek

Wyjątki punktu zmiennoprzecinkowego W C ++ są spowodowane nieprawidłowymi operacjami wartości liczbowych i mogą wpływać na zdolność programu do prawidłowego wykonywania. Aby uniknąć takich błędów, ważne jest, aby sprawdzić wszystkie parametry przekazywane do funkcji i użyć odpowiednich typów danych. Ponadto korzystne jest złapanie Wyjątki punktu zmiennoprzecinkowego.