Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

1

03.03.2012, 17:03

Die Sache mit der Genauigkeit

Wie wir alle wissen, gibt es bei gleit-/fließkommadarstellungen öfters mal ein problem mit der genauigkeit, allerdings stellt sich mir die frage, wie kann ich dann eben solche berechnungen oÄ. mit einer passenden genauigkeit realisiern.

das genannte beispiel hat jetzt eig keinen weiteren nutzen, aber es zeigt worauf ich hinauswill, denn schließlich gehts bei dem beispiel jetzt nur um eine einzige stelle nach dem komma. was mach ich dann, wenn ich zahlen auf xy stellen genau brauche?

C#-Quelltext

1
2
 double d = 0.0;
            while (d != 1.0){       Console.WriteLine(d);       d += 0.1;}



bzw halt so (habs in C# und Java probiert um sicher zu sein, dass es kein sprachen-problem ist)

Quellcode

1
double d = 0.0;while (d != 1.0){    System.out.println(d);  d += 0.1;}


der code läuft bis in alle ewigkeit ^^

EDIT:
kA, iwie buggt die formatierung

EDIT2:
ja, per d < 1.1 gehts, aber darum gehts jetzt nicht ;)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Wirago« (03.03.2012, 17:12)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

03.03.2012, 17:35

Naja, wie du schon selbst gesehen hast, kannst du halt nicht genau abfragen, sondern musst Grenzen benutzen. Wie in deinem Fall mit < 1.1. Das geht nun mal anders nicht zu lösen. Wenn du dir mal anguckst wie Fließkommazahlen intern realisiert werden wird das Problem ganz schnell klar.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

03.03.2012, 18:06

Wenn du beliebige genauigkeit haben willst, dann musst die die Berechnungen schon selber machen und sie nicht der Hardware überlassen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

03.03.2012, 18:35

Wenn du beliebige genauigkeit haben willst, dann musst die die Berechnungen schon selber machen und sie nicht der Hardware überlassen.

Beliebige Genauigkeit geht durchaus auch mit dem Computer.. Oder meintest du selbst programmieren?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

03.03.2012, 18:41

Ja ich meinte selber Programmieren. In Software ist das ja kein Problem.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

03.03.2012, 21:31

Ich glaub es gibt den Typ decimal...
Wie wärs mit einem unsigned byte-Array?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

7

03.03.2012, 21:42

decimal ist auch "nur" auf 28-29 stellen genau.

8

03.03.2012, 22:14

Und Decimal ist auch zur Basis 2, womit du 0,1 wieder nicht genau darstellen kannst.

Nette Lektüre hierzu.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

03.03.2012, 23:34

C#-Quelltext

1
2
 double d = 0.0;
            while (d != 1.0){       Console.WriteLine(d);       d += 0.1;}

Sowas macht man einfach nicht.

Besser so:

C#-Quelltext

1
2
for (int i = 0; i < 10; ++i)
  Console.WriteLine(i * 0.1);

;)

Mastermind

unregistriert

10

04.03.2012, 09:14

Wenn du beliebige genauigkeit haben willst, dann musst die die Berechnungen schon selber machen und sie nicht der Hardware überlassen.

Beliebige Genauigkeit geht durchaus auch mit dem Computer.. Oder meintest du selbst programmieren?


Ich wage mal zu bezweifeln, dass ein Digitalrechner PI mit allen Nachkommastellen darstellen kann. Oder was wäre für dich beliebige Genauigkeit? Bzw. was wäre ein Computer? Die Turing-Maschine hätte hier wohl einen Vorteil :)

Werbeanzeige