oenone hat geschrieben:Xin hat geschrieben:0.1 ist dezimal. Computer rechnen binär.
Das ist mir klar. Allerdings kann ich eine Datenstruktur definieren, die eine fixe Anzahl an dezimalen Nachkommastellen darstellt.
Ja, das geht.
Das wäre a) kein Primitiv, daher b) langsam beim rechnen und c) löst es das grundsätzliche Problem nicht, dass mit begrenzten Speicher Rundungsfehler entstehen, denn...
oenone hat geschrieben:Eine einfache Implementierung wäre z.B. die Zahl einfach ohne das Komma ins Binäre zu übersetzen. Da die Anzahl an Nachkommastellen bekannt ist, wird bei Konvertierungen (z.B. für Ausgabe) das Komma wieder eingefügt. Damit wäre 0.1 intern wie eine 1 dargestellt.
...dann speichere mal 0.01.
oenone hat geschrieben:Genau sowas gibt es bei Ada von Haus aus mit. Ich kann durch "type Fixed is digits 1;" festlegen, dass der Typ "Fixed" eine dezimale Nachkommastelle enthält. Intern werden zwar weiterhin IEEE-Floats benutzt, aber bei den Berechnungen werden die zusätzlichen Einschränkungen berücksichtigt, wodurch aus (666.6-666.5)*10000 auch wirklich 1000.0 raus kommt.
Das hätte ich dann gerne erstmal bewiesen. ^^
Könntest Du das Ergebnis mal auf 25 Nachkomma-Stellen ausgeben?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.