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 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.