PDA

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 ;)

#44
2006-11-06, 17:16:04
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 ;)

#44
2006-11-06, 18:42:26
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

Gast
2006-11-07, 09:58:05
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

#44
2006-11-07, 16:18:41
+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();

#44
2006-11-08, 14:18:15
oder in C# z.B.

int dummy = Console.Read();


So hab ich mir auch geholfen... Aber das muss doch auch anderst gehen o_O

Xmas
2006-11-08, 15:34:24
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.

#44
2006-11-08, 16:39:25
Wenn Du’s ohne Debugger startest (Strg+F5), pausiert er nach der Ausführung automatisch. THX & HWK im Forum