Archiv verlassen und diese Seite im Standarddesign anzeigen : c#: Wieso funktioniert das...
Elemental
2006-11-06, 16:51:21
Hallo zusammen,
habe gerade folgendes Meisterstück im code entdeckt:
//recalculate the number of reels
int iNumberOfPlacedComps = (int)oneMoreRow["NumberOfPlacedComps"];
int iComponentsOnReel = (int)oneMoreRow["ComponentsOnReel"];
int iNumberOfCompleteReels = (int)((double)iNumberOfPlacedComps / (double)iComponentsOnReel);
Die Frage ist jetzt, wieso ich dort keine DevideByZeroException kriege, wenn iComponentsOnReel == 0 :confused:
mfG
Elemental
Expandable
2006-11-06, 16:54:58
Ist es nicht so, dass (FP-Zahl) / 0.0f = infinity ist? AFAIK gibt es DivideByZero-Exceptions bloß bei Division durch 0 von Ganzzahltypen? Oder war das bei C++ so?
*lol* Sorry, bin grad verwirrt, aber irgendsowas gab's in der Richtung mal ;)
Ist es nicht so, dass (FP-Zahl) / 0.0f = infinity ist? AFAIK gibt es DivideByZero-Exceptions bloß bei Division durch 0 von Ganzzahltypen? Oder war das bei C++ so? Ja das ist so. (Kannsts ja mal mit einer Ausgabe der Variable (bzw Breakpoint) überprüfen) Denk mal in C++ wirds ähnlich/gleich sein.
Expandable
2006-11-06, 18:30:52
(Kannsts ja mal mit einer Ausgabe der Variable (bzw Breakpoint) überprüfen)
Hätte ich ja auch schon längst getan, wenn ich grad ein Visual Studio hier hätte ;)
Hätte ich ja auch schon längst getan, wenn ich grad ein Visual Studio hier hätte ;) Hatte eher den Threadersteller gemeint ;)
BTW: VCS Express 2005 (http://www.microsoft.com/germany/msdn/vstudio/products/express/visualcsharp/default.mspx)
http://mitglied.lycos.de/drybot/infinity.PNG
Hab da mal schnell was gebastelt... ;)
Elemental
2006-11-06, 19:28:24
Hmm, komisch.
Bei mir war
iNumberOfPlacedComps = 10;
iComponentsOnReel = 0;
und als Ergebnis kam raus
iNumberOfCompleteReels = 0
Oder hab ich micht getäuscht?
Wenn ich jetzt ein kleines Beispiel bastel, komm ich auf das gleiche wie #44 ...
Elemental
2006-11-07, 08:56:40
Ist denn definiert, was rauskommen soll, wenn man +unendlich auf integer casted?
Bei mir daheim hab ich gestern abend das gleiche raus bekommen, wie #44.
Aber hier in der Arbeit kommt da 0 raus!
Beides getestet mit Visual Studio 2005 Team Edition for Software Developers.
mfG
Elemental
2006-11-07, 09:34:25
Probiert mal das hier:
int x = 2;
Int16 ergebnis1;
Int32 ergebnis2;
Int64 ergebnis3;
double zwischenstand;
zwischenstand = (x / 0.0);
ergebnis1 = (Int16)(x / 0.0);
ergebnis2 = (Int32)(x / 0.0);
ergebnis3 = (Int64)(x / 0.0);
Console.WriteLine(zwischenstand);
Console.WriteLine(ergebnis1);
Console.WriteLine(ergebnis2);
Console.WriteLine(ergebnis3);
:D
Probiert mal das hier:
int x = 2;
Int16 ergebnis1;
Int32 ergebnis2;
Int64 ergebnis3;
double zwischenstand;
zwischenstand = (x / 0.0);
ergebnis1 = (Int16)(x / 0.0);
ergebnis2 = (Int32)(x / 0.0);
ergebnis3 = (Int64)(x / 0.0);
Console.WriteLine(zwischenstand);
Console.WriteLine(ergebnis1);
Console.WriteLine(ergebnis2);
Console.WriteLine(ergebnis3);
:D
+unendlich
0
-2147483648
-9223372036854775808
Press any key to continue
Elemental
2006-11-07, 10:11:57
Das krieg ich daheim auf meinem Athlon64 auch, aber hier bei meinem Athlon XP-M, krieg ich auch 0 raus, wenn auf int32 gecastet wird.
Ich geh jetzt jedenfalls mal davon aus, dass dieser Unterschied am Prozessor liegt, oder? Beide Rechner haben Windows XP Professionel.
Gruss
Elemental
+unendlich
0
-2147483648
-9223372036854775808
Press any key to continue
Bis auf die letzte Zeile dito. Hab ich wieder an den Settings pfusch gebaut oder warum schließt die Konsole sich direkt?
Elemental
2006-11-07, 20:21:37
...warum schließt die Konsole sich direkt?
Das is normal! In C++ hilft da z.B. ein
system("PAUSE");
oder in C# z.B.
int dummy = Console.Read();
oder in C# z.B.
int dummy = Console.Read();
So hab ich mir auch geholfen... Aber das muss doch auch anderst gehen o_O
Probiert mal das hier:
Da müsste man mal nachprüfen ob das Ergebnis mit der gleichen Exe überall gleich ist. Ein optimierender Compiler sollte eigentlich die Berechnung vollständig durch Konstanten ersetzen.
Novox
2006-11-08, 16:03:04
So hab ich mir auch geholfen... Aber das muss doch auch anderst gehen o_O
Wenn Du’s ohne Debugger startest (Strg+F5), pausiert er nach der Ausführung automatisch.
Wenn Du’s ohne Debugger startest (Strg+F5), pausiert er nach der Ausführung automatisch. THX & HWK im Forum
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.