Entwickler-Ecke
C# - Die Sprache - Problem mit C# / .NET Berechnung
AdrianK - Fr 13.03.09 15:06
Titel: Problem mit C# / .NET Berechnung
Hallo,
ich programmiere gerade einen Funktionszeichner mit C#. Um die Funktionen so gut wie
möglich darzustellen erstelle ich die Wertetabelle nicht nur in einer Schritten sondern
in 0.1 Schritten. Das mache ich mit einer simplen for Schleife:
C#-Quelltext
1: 2: 3: 4:
| for (Single i = start; i <= end; i = i + (Single) 0.1 ) { } |
Jedoch macht C# einen Fehler beim Hochzählen:
Quelltext
1: 2: 3:
| -10.0+0.1 = -9.9 -9.9+0.1 = -9.8 -9.8+0.1 = -9.700000000000011 ?! |
ab da stimmt dann natürlich nichts mehr. (Der Fehler tritt auch im Direkt Fenster des Debuggers auf)
Was mache ich falsch? (Ich kann mir eigentlich nicht vorstellen, dass es an C# liegt...
wäre ja ein riesen Bug)
Danke schonmal
@Edit: Tippfehler korigiert
Kha - Fr 13.03.09 16:55
Wenn ich mir die Zahlen so ansehe, geht es glaub ich nicht um einen Rundungsfehler - 0,7 Abweichung wäre doch etwas extrem :zwinker: .
@AdrianK: Falls die ~-9,0 statt -9,7 wirklich stimmen, müsstest du daraus unbedingt mal ein Minimalbeispiel bauen :shock: :gruebel: . Damit kann ich es jedenfalls nicht reproduzieren:
C#-Quelltext
1: 2: 3: 4: 5:
| static void Main(string[] args) { for (float f = -10; f <= 0; f += 0.1f) Console.WriteLine(f); } |
Quelltext
1: 2: 3: 4: 5: 6: 7:
| -10 -9,9 -9,799999 -9,699999 -9,599998 -9,499998 ... |
bakachan - Fr 13.03.09 17:10
Kha hat folgendes geschrieben : |
| Wenn ich mir die Zahlen so ansehe, geht es glaub ich nicht um einen Rundungsfehler - 0,7 Abweichung wäre doch etwas extrem :zwinker: . |
Ich vermute mal er hat sich da oben nur verschrieben.
Ansonsten die kleinen Abweichungen beim Schleifenzähler (wie bei Kha's Post) sind normal. Notfalls halt Math.Round auf eine Dezimalstelle.
Falls das oben aber kein Verschreiber ist und da wirklich
| Zitat: |
| -9.8+0.1 = -9.000000000000011 ?! |
kam, bin ich ratlos.
AdrianK - Fr 13.03.09 18:47
ja, war ein Verschreiber :) richtig heist es -9.700000000000011
Werds mal mit Decimal / runden versuchen.
Kha - Fr 13.03.09 19:21
AdrianK hat folgendes geschrieben : |
| ja, war ein Verschreiber :) |
...
Dann kann ich aber das nicht so stehen lassen ;) :
JüTho hat folgendes geschrieben : |
| Das ist ein "Bug" von Intel. |
Auch wenn es in Anführungszeichen steht: Es ist einfach "As Designed".
AdrianK hat folgendes geschrieben : |
| Werds mal mit Decimal / runden versuchen. |
Bisher sagtest du nur etwas von Zeichnen und nicht von Ausgeben, dabei sollte doch nicht stören, wenn die Dezimaldarstellung etwas murks ist?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!