Thread Rechenfehler mit Perl ausgleichen (71 answers)
Opened by bianca at 2013-04-27 13:42

GUIfreund
 2013-04-30 23:07
#167375 #167375
User since
2011-08-08
559 articles
BenutzerIn
[default_avatar]
2013-04-30T07:40:50 Muffi
Ich hab jetzt länger überlegt was man da schreiben soll.
Da geht 2 Threads lang um das Thema mit dem Ergebnis, dass zum Schluss wieder einer mit sprintf-hokuspokus anfängt.

... freilich mit dem Unterschied, dass ich nicht das Ergebnis zu Integer wandele, sondern eine Dezimalzahl der Aufgabe skaliere und dann umwandle, um die Rechnung mit Integern durchzuführen. Siehe meine Antwort msg #167374 an bianca.
2013-04-30T07:40:50 Muffi
Wenn du bei ((1 - 0.9999) * 10000) die Genauigkeit erhöhen willst musst du versuchen keine ähnlich grossen Zahlen voneinander zu subtrahieren. Z.b. mit dem 10000 nach innen.
(1*10000 - 0.9999*10000) sollt genauer sein.
Aber das wars dann auch schon.

Das klappt wohl nur, weil der zweite Faktor eine passende Zehnerpotenz ist. Im Allgemeinen hättest du eine Gleitkommazahl erhalten, und die ist wieder ungenau.
Code: (dl )
1
2
perl -e "printf '%.16f', 0 + (1*12345 - 0.9999*12345)"
1.2345000000004802
Gruß
GUIfreund

View full thread Rechenfehler mit Perl ausgleichen