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

11

04.03.2012, 10:25

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

;)


das is mir schon klar. hätte ich auch nicht. mich hats nur verwundert, dass man im prinzip nicht mal eben sowas simples wie in 0.1 schritten afuf 1.0 rechnen lassen kann, ohne, dass es da schon probleme mit den nachkommazahlen gibt. dachte immer, dass derartiges erst bei etlichen nachkommastellen auftritt

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

04.03.2012, 10:35

0.1 hat im Binärsystem unendlich viele Nachkommastellen, genau das ist das Problem.
Mit 0.25 z.B. würd's funktionieren.
Aber nochmal: Sowas macht man nicht ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

04.03.2012, 11:46

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

Beliebig heisst nicht unendlich. ;)
Wenn du sagst, dass du PI auf 10^1000 Stellen genau willst, dann kann das ein Computer berechnen. Wie lange das geht ist ja eine andere Frage, aber prinzipiell möglich.
Und afaik sind gängige Computer äquivalent zu Turing-Maschinen. Die Simulation lässt sich ja einfach programmieren.

Mastermind

unregistriert

14

04.03.2012, 14:37

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

Beliebig heisst nicht unendlich. ;)
Wenn du sagst, dass du PI auf 10^1000 Stellen genau willst, dann kann das ein Computer berechnen. Wie lange das geht ist ja eine andere Frage, aber prinzipiell möglich.
Und afaik sind gängige Computer äquivalent zu Turing-Maschinen. Die Simulation lässt sich ja einfach programmieren.


Eben nicht. Die Turing-Maschine hat ein unendliches Band. Für jeden realen Digitalrechner gibt es dagegen eine Anzahl von Nachkommastellen sodass PI bis zu dieser Anzahl nicht mehr in den Speicher passt. Diese Anzahl ist endlich, die Genauigkeit somit nicht beliebig.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

04.03.2012, 15:31

Streng genommen ist jeder realisierbare Rechner nur ein endlicher Automat mit einer großen Menge von Zuständen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

04.03.2012, 16:20

Und wie gesagt, zu dem Problem musst du dir einfach mal die Realisierung von Fließkommazahlen angucken. Dann siehst du sehr schnell wo da das Problem liegt. Und 0.1 lässt sich natürlich im Binärsystem darstellen. Kommt doch immer auf die Definition an. Stell dir ein System mit Festkommazahlen vor. Das erste Byte ist die Zahl vor dem Komma und das zweite Byte die nach dem Komma. Dann könntest du ohne Probleme 0.1 als 01 darstellen. Je nach Definition deiner Darstellung.
„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.“

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

04.03.2012, 16:33


Eben nicht. Die Turing-Maschine hat ein unendliches Band. Für jeden realen Digitalrechner gibt es dagegen eine Anzahl von Nachkommastellen sodass PI bis zu dieser Anzahl nicht mehr in den Speicher passt. Diese Anzahl ist endlich, die Genauigkeit somit nicht beliebig.

Hmm. Unendlich geht natürlich nicht, aber warum sollte beliebig nicht gehen? Die Ressourcen dazu kann man theoretisch beschaffen.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

18

04.03.2012, 16:55

Man kann natürlich auch symbolisch rechen ;) Das geht aber nur für Zahlen, die sich mit einer endlichern Formel definieren lassen (Was beim Computer kein Problem darstellt =) denn alle anderen Zahlen sollten keinerlei Interesse wecken, sie dürften sich erst im unendlichen ohne system von einer berechenbaren Zahl untescheiden)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

19

13.03.2012, 19:22

Und wie gesagt, zu dem Problem musst du dir einfach mal die Realisierung von Fließkommazahlen angucken. Dann siehst du sehr schnell wo da das Problem liegt. Und 0.1 lässt sich natürlich im Binärsystem darstellen. Kommt doch immer auf die Definition an. Stell dir ein System mit Festkommazahlen vor. Das erste Byte ist die Zahl vor dem Komma und das zweite Byte die nach dem Komma. Dann könntest du ohne Probleme 0.1 als 01 darstellen. Je nach Definition deiner Darstellung.
Du meinst das z.b. 0x1010 dann 16,16 bedeutet? Oder 16,016? Das ist beides kein Binaersystem. Im Binearsystem ware es die Zahl 16+16/256. Und damit kann man eben 0.1 nicht darstellen sondern nur 25/256 und 26/256. Per Definition geht das nun mal genausowenig wie im Dezimalsystem 1/7 darzustellen.

Werbeanzeige