Forum: PC-Programmierung C# Addition von Long zahlen funktioniert plötzlich nicht mehr


von Jonny C (Gast)


Lesenswert?

Guten Abend,

Ich habe momentan ein Problem, das ich mir nicht erklären kann. In einer 
Windows Forms app wird ein Long Wert in einer Textbox ausgegeben. Es 
handelt sich um ein Spiel, in dem man etwas produziert und der Score, 
der eben in der Textbox angezeigt wird, soll irgendwann astronomisch 
hohe werte annehmen. Eine Andere Long Variable wird jede Sekunde auf den 
Score aufaddiert.

Das alles funktioniert auch problemlos, bis der Score eine gewisse größe 
erreicht und plötzlich nichts mehr passiert. Der andere Long wert, der 
bisher jede Sekunde addiert wurde, wird jetzt nicht mehr addiert.



private void timer1_Tick(object sender, EventArgs e)
        {
            Score = Score + Autoproduktion;
        }

ich kann den score auch per klick beeinflußen, was weiterhin 
funktioniert. nur die Addition der Autoproduktion funktioniert eben 
plötzlich nicht mehr, wenn der score so ca. in den 30 stelligen bereich 
kommt.

hat jemand eine Ahnung, woran das liegen kann?

von Kaj (Gast)


Lesenswert?

Jonny C schrieb:
> wenn der score so ca. in den 30 stelligen bereich
> kommt.
>
> hat jemand eine Ahnung, woran das liegen kann?
Ueberleg mal, wie gross der Wert bei 2^64 werden kann.
Kleiner Tipp: 18.446.744.073.709.551.616

Und jetzt zaehle mal die Stellen, und dann kommst du vielleicht auf dein 
Problem.

von Jonny C (Gast)


Lesenswert?

verstehe ich das richtig, dass ein double wert zwar 
1,79769313486232x10^308
groß werden kann, aber alle dezimalstellen nach der 18. bleiben am ende 
nullen?

von BigInteger (Gast)


Lesenswert?

Wahrscheinlich brauchst du die System.Numerics.BigInteger. Da kannst du 
addieren, bis der Hauptspeicher ausgeht.

von Flaschen Zähler (Gast)


Lesenswert?

> verstehe ich das richtig,..

Nein. Zwar in der Richtung. Der groesste darstellare Wert ist 10^3932
Davon sind 53 bit Mantisse und 11 bit exponent. Die signifikanten 
Stellen sind die 53 bit. Dh kleiner als das 53.te bit bringt nichts 
mehr.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.