yucosuma
24-07-2006, 19:47
Hi,
in meinem Softwarepraktikum in C++ hatte ich ein kleines Problem, mitlerweile ist es zwar gelöst, aber mich interessierts trotzdem:
Und zwar habe ich einen Vergleich einer long double und einer integer-Zahl gemacht der Form
long double v;
if v < 0
{...}
Das Problem dabei war, die Variable v war entweder positiv oder sie war im Bereich zwischen +10^-5 und -10^-5, also knapp um die Null rum. War sie negativ, dann sollte eine Fehlermeldung ausgegeben werden. Nun wurde mit meinem g++-Compiler (g++ (GCC) 3.3.5 mit Linux 9.3 bzw. Linux 10.1) nie eine Fehlermeldung ausgegeben, da die Variable v anscheinend als Integer gecastet wurde und damit immer automatisch auf Null gerundet wurde. Auf einem anderen PC (ebenfalls g++ (GCC), Version unbekannt, aber auch sehr neu, mit Linux 10.1) wurde hingegen eine Fehlermeldung ausgegeben wenn die Variable v negativ war, hier wurde anscheinend nicht auf integer gecastet und somit nicht zur Null gerundet.
Wie sieht denn der Standard aus beim Vergleich zweier unterschiedlicher Datentypen? Soweit ich weiß, wird der "kleinere" Datentyp (hier int mit 0) zum "größeren" Datentyp (hier long double) gecastet, das Verhalten des zweiten PCs mit der Ausgabe der Fehlermeldung war also ok, warum gibt nun mein PC keine Fehlermeldung aus und castet hier beides zu integer bzw. tut etwas anderes, jedenfalls ohne Fehlermeldung?
Vielleicht kann mir das jemand erklären, hab da nämlich ein kleines Verständnisproblem :o
Vielen Dank schonmal.
yucosuma
in meinem Softwarepraktikum in C++ hatte ich ein kleines Problem, mitlerweile ist es zwar gelöst, aber mich interessierts trotzdem:
Und zwar habe ich einen Vergleich einer long double und einer integer-Zahl gemacht der Form
long double v;
if v < 0
{...}
Das Problem dabei war, die Variable v war entweder positiv oder sie war im Bereich zwischen +10^-5 und -10^-5, also knapp um die Null rum. War sie negativ, dann sollte eine Fehlermeldung ausgegeben werden. Nun wurde mit meinem g++-Compiler (g++ (GCC) 3.3.5 mit Linux 9.3 bzw. Linux 10.1) nie eine Fehlermeldung ausgegeben, da die Variable v anscheinend als Integer gecastet wurde und damit immer automatisch auf Null gerundet wurde. Auf einem anderen PC (ebenfalls g++ (GCC), Version unbekannt, aber auch sehr neu, mit Linux 10.1) wurde hingegen eine Fehlermeldung ausgegeben wenn die Variable v negativ war, hier wurde anscheinend nicht auf integer gecastet und somit nicht zur Null gerundet.
Wie sieht denn der Standard aus beim Vergleich zweier unterschiedlicher Datentypen? Soweit ich weiß, wird der "kleinere" Datentyp (hier int mit 0) zum "größeren" Datentyp (hier long double) gecastet, das Verhalten des zweiten PCs mit der Ausgabe der Fehlermeldung war also ok, warum gibt nun mein PC keine Fehlermeldung aus und castet hier beides zu integer bzw. tut etwas anderes, jedenfalls ohne Fehlermeldung?
Vielleicht kann mir das jemand erklären, hab da nämlich ein kleines Verständnisproblem :o
Vielen Dank schonmal.
yucosuma