Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Überlauf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.06.2004, 13:04 Uhr
~beginner
Gast


Sers leute,

kann jemand sagen ob es eine Funktion gibt die zum Beispiel überprüft
ob das in einer float(int, double...)-variable gespeicherte Ergebnis einer Additon oder wie auch immer, die Richtigkeit aufgrund der Stellenanzahl
der Operanden verloren hat. spricht ob ein Überlauf stattgefunden hat?!
oder wie kann man so etwas abfangen...?
Danke schon mal#
.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.06.2004, 15:05 Uhr
virtual
Sexiest Bit alive
(Operator)


Einen Integerüberlauf kann man portabel nur durch entsprechende Tests auf die Schliche kommen, bevor man die Rechenoperation durchführt. Nicht protabel ist folgende VC Spezifische Lösung:

C++:
int x = 0x7fffffff; // +1 Sollte Überlauf bringen
int y;
...
try
{
     y = x+1;       // Sollte überlauf produzieren
     __asm into;   // Testet überlauf
}
catch(...)
{
     Fängt überlauf ab
}


Bei fließkommazahlen kann man nach einer Rechenoperation gegen std::numeric_limits<float>::infinity testen-
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2004, 12:42 Uhr
~beginner
Gast


Hey du schlauer Op,

wie wende ich das infinity dann an, bitte?!
mercn... bis gleich

greetz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2004, 12:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
#include <iostream>
#include <limits>

int main(){
double a=3,b=0;
if(fabs(a/b)==std::numeric_limits<double>::infinity())std::cout<<"Dumm gelaufen....";
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2004, 13:33 Uhr
~beginner
Gast


hey windalf,

angenommen ich nehme infinity dann auf folgendes her:

9999999999999999*99999999999999999999, müsste ja überlauf passieren oder?!

if(fabs(opA*opB) == numeric_limits<float>::infinity())
{
ShowMessage("Überlauf!");
}
else
{ erg = opA * opB;}

wird dann der evtl. Überlauf mit der ShowMessage abgefangen?
oder wie kann ich dann den compiler am auswerten hindern?

thx,& greetz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2004, 15:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


bei floats gibt es imho eigentlich keinen direkten überlauf sondern es wurde eine bestimmte bytekombination für unendlich und -unendlich und was weiss ich reserviert... du musst dich also um nix weiter kümmern sondern nur testen ob da nach der mutlipliaktion unendlich drin steht und wenn nicht kannst du weitermachen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: