Flytende punkt unntak C ++ Hvorfor og hva er det?

Flytende punkt unntak C ++ Hvorfor og hva er det?
Flytende punkt unntak oppstår når en programvare prøver å utføre en feil operasjon på et numerisk nummer. Denne typen unntak oppstår når en bruker prøver å utføre ugyldige operasjoner, for eksempel divisjon med null, deling av et negativt tall med et jevnt tall, og tar kvadratroten til et negativt tall, eller overløp av en beregning som overstiger grensen for Dobbelt datatype.

I C ++, “Sigfpe” Signalhandler håndterer Flytende punkt unntak (FPES). Når en bruker prøver å utføre de nevnte oppgavene, kalles denne signalbehandleren. Når signalbehandleren har grepet inn, skriver den ut en feilmelding til standardutgang og stopper programmet.

Hvorfor oppstår unntak fra flytende punkt?

Flytende punkt unntak kan oppstå på grunn av programmeringsfeil eller når et program prøver å behandle en verdi som er utenfor spesifikasjonen. For eksempel, hvis et program prøver å dele et heltall med null, eller hvis et program prøver å ta kvadratroten av et negativt tall, en Flytende punkt unntak vil skje. Videre, noen Flytepunkts unntak kan oppstå på grunn av prosessor feilutvikling.

Mange faktorer, for eksempel upassende drift, understrømning, overløp, deling av null og nøyaktighet, kan føre til en Flytende punkt unntak. Vi vil dekke disse argumentene en etter en i denne delen.

1: Ulovlig drift

Når en bruker glemmer å uttrykke en operasjon eller operasjonen ikke har noen matematisk verdi, klarer ikke programmet å utføre på grunn av en ugyldig operasjon. Dette inkluderer beregninger som kvadratrot og logaritme med negative tall, for eksempel. Selv om det er mulig å ta kvadratroten av et negativt tall når du arbeider med komplekse tall, er det ingen datamaskinbasert mekanisme for å uttrykke dette.

I tillegg vil en feil operasjon resultere hvis en programvare utfører en flytende punkt Operasjon på et heltalls beliggenhet. Dette skyldes et misforhold mellom operasjonen du prøver å utføre dataene (flytende punktoperasjon) og lagrede data (heltall).

2: null divisjon

EN Flytende punkt unntak blir kastet hvis du prøver å dele et heltall med null. Det samme oppstår når du prøver å dele med Nan eller uendelig. Her er noen eksempler: 1/0, logg (0).

3: Overløp

Når en operasjon returnerer en verdi som er utenfor forventet rekkevidde, skjer det et overløps unntak. Verdien er enten mer eller lavere enn den minste representable verdien, i henhold til denne uttalelsen.

4: Understrømning

Understrømning skjer når en beregning gir et resultat som er mindre enn hva en datatype kan holde.

5: inexacct

Når utfallet av en operasjon skiller seg fra det som var forventet, er dette kjent som et uunngåelig unntak. Når operasjonen utføres med ubundet presisjon og et eksponentområde, skjer dette.

I noen tilfeller kan slike situasjoner håndteres grasiøst. For eksempel, når et program prøver å dele et tall med null, er det generelt å foretrekke å returnere en feilmelding og grasiøst avslutte programmet i stedet for å la programmet krasje.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Float Div (Float Num, Float Den)

if (den == 0)
Kast Runtime_error ("Matematikkfeil: Forsøkt å dele opp med 0 \ n");

return (num / den);

int main ()

Float num, denom, resultat;
num = 10;
Denom = 0;
prøv
Resultat = div (num, denom);
cout << "The quotient is " << result << endl;

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

I denne koden, Div funksjon kalles av prøveblokken inne i hoved-. Hvis Denom er ikke lik null, de Div funksjon returnerer kvotienten; Hvis det er, en Runtime Feil unntak blir kastet. Før du kaller hvilken funksjon med Runtime Feilobjekt E, avskjærer fangstblokken dette unntaket og skriver ut teksten "Feil oppsto". Det brukes til å identifisere unntaket. Klassestandard unntak, som er beskrevet i stDexcept headerfil, har en virtuell funksjon som heter hva(). Meldingen “Matematikkfeil: Forsøkt å dele seg med 0” skrives ut som et resultat.

Produksjon

Å forhindre Flytende punkt unntak I C ++ er det viktig å sjekke alle parametrene som er gitt til funksjoner, å bruke passende formater og eksplisitt teste deling av divisorer for nullverdier. I tillegg, når du bruker doble datatyper, er det viktig å forstørre datatypen hvis programmet krever større aritmetiske resultater.

Konklusjon

Flytende punkt unntak I C ++ er forårsaket av ugyldige operasjoner på numeriske verdier og kan påvirke programmets evne til å utføre riktig. For å unngå slike feil, er det viktig å sjekke alle parametrene som er overført til funksjoner og å bruke passende datatyper. Videre er det gunstig å fange Flytende punkt unntak.