1

Ich habe ein einfaches C-Programm, das berechnet (1e200)^2, die eine Gleitkommaüberlauf Ausnahme verursachen sollte, da die größte double 1e308 oder so ist.Um einen Gleitkommaüberlauf zu erfassen excepiton

double square(double x){ 
    return x*x; 
} 

int main(){ 
    double x = 1e200; 
    double y= square(x); 
} 

Meine Fragen sind:

(1) Wie kann man die Ausnahme über eine Befehlszeile erfassen, so dass, wenn das Programm ausgeführt wird, kann die Ausnahme von dem Terminal ausgedruckt werden?

(2) Wie können Sie die Ausnahme erfassen, indem Sie zusätzliche Anweisungen einfügen, die während der Programmausführung das Gleitkommaausnahmesignal ausgeben? Aus Gründen der Allgemeingültigkeit würde ich es vorziehen, y==inf nicht zu verwenden, um dieses Ziel zu erreichen.

Danke.

+0

Für die nicht automatisierte Art der Überprüfung auf Fehler, siehe [hier] (http://stackoverflow.com/q/15655070/478288). – chrisaycock

+0

etwas wie 'if (y == inf) {printf (" Überlauf ");}'? –

+0

@ KamiKaze-- AFIK, Implementierungen sind nicht erforderlich, um 'inf' zu verwenden. –

Antwort

0

Ich denke, Sie suchen nach etwas wie diesem ... obwohl das ist Typ char, Sie könnten so etwas ähnliches ich glaube ... und dann können Sie geben, was printf Anweisung innerhalb der errno == ERANGE elseif Zustand .

int check_for_non_number(char *input) 
{ 
    errno = 0; 
    char *endptr; 
    double xnum = strtod(input, &endptr); 
    // IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS NOT THE NEW LINE CHARACTER THEN ITS AN ERROR 
    if((*endptr) && (*endptr != '\n')) 
    { 
     return 1; 
    } 
    else if (errno == ERANGE) 
    { 
     printf("OPERAND IS OUT OF RANGE"); 
     return 1; 
    } 
    // ELSE IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS THE NEW LINE CHARACTER THEN RETURN 2 TO CHECK IF IT SHOULD BE A NEW LINE 
    else if((*endptr) && (*endptr == '\n')) 
    { 
     return 2; 
    } 
    else 
    { 
     return 0; 
    } 
} 
Verwandte Themen