SIGFPE | |
---|---|
Descriere | Operație aritmetică eronată |
Mod implicit | se încheie cu un dump de memorie |
Codurile SA_SIGINFO | |
FPE_INTDIV | Împărțirea întregului cu zero |
FPE_INTOVF | overflow întreg |
FPE_FLTDIV | Împărțirea cu virgulă mobilă zero |
FPE_FLTOVF | debordare în virgulă mobilă |
FPE_FLTUND | Debordare în virgulă flotantă |
FPE_FLTRES | Eroare de precizie în virgulă mobilă |
FPE_FLTINV | Operatie invalida cu numere cu virgula mobila |
FPE_FLTSUB | Dincolo de index |
Pe sistemele POSIX , SIGFPE este un semnal trimis unui proces atunci când încearcă să efectueze o operație aritmetică eronată.
SIGFPE este o constantă întreagă definită în signal.h. Numele simbolice ale semnalelor sunt folosite în locul numerelor, deoarece numerele semnalelor pot diferi în diferite implementări.
SIG - prefix comun , semnale, FPE - abrevierea engleză. floating-point exception - o excepție într-o operație în virgulă mobilă. De fapt, SIGFPE este folosit și pentru aritmetica întregului, dar numele este păstrat pentru compatibilitatea cu codul invers .
Un SIGFPE poate fi trimis unui proces din mai multe motive. Cel mai comun dintre acestea este depășirea tipului de date ca urmare a unor valori de intrare neașteptat de mari (sau mici) și/sau a unei erori de proiectare a programului.
SIGFPE poate fi interceptat sau ignorat. Ignorarea SIGFPE în unele cazuri poate duce la rezultate imprevizibile - programul se poate bucla în încercarea de a efectua o operație eronată. Dacă SIGFPE nu este rezultatul unei operații aritmetice (dar, de exemplu, trimis folosind un apel de sistem kill() ), atunci o astfel de ignorare este destul de sigură.
La împărțire, SIGFPE apelează nu numai la un divizor zero - pe unele platforme (inclusiv x86), diviziunea întregului INT_MIN, cel mai mic număr întreg (negativ), cu (−1), nu poate fi efectuată, deoarece un număr pozitiv cu acest modul nu este reprezentabil. (cu INT_MIN = (−2147483648), INT_MAX = 2147483647).
Semnale POSIX | |||
---|---|---|---|
| |||
|