Einzelnen Beitrag anzeigen

Waldteufel
(Gast)

n/a Beiträge
 
#12

Re: [Andorra 2D] unbekanntes Problemchen ;)

  Alt 27. Mai 2007, 18:04
Hallo.

Incubus, diese Ungenauigkeit bekommst du einfach nicht weg. Glaub's uns doch endlich. Das hängt damit zusammen, dass der Computer die Zahlen intern imho als a*2^b speichert.

Vereinfachtes Beispiel

2^(ln(11)/ln(2)) ist 11 (ln = natürlicher Logarithmus)

ln(11)/ln(2) ist etwa 3,459431618 (auf 9 Nachkommastellen gerundet)

Wenn wir jetzt zum Beispiel nur 3,459432 nehmen (also auf 6 Nachkommastellen gerundet) kommt aber (2^3,45) etwa 11,00000290 heraus und das ist nicht 11.

Ähnlich entsteht auch der Fehler bei dir. Aber nur, wenn du nicht mit Ganzzahlen (integer), sondern mit Kommazahlen arbeitest. Daher: Kommazahlen nur verwenden, wenn es unbedingt sein muss.

Also nimm IntToStr, wenn es doch sowieso schon eine Zahl ohne Nachkommastellen ist.
FloatToStr wandelt nämlich erst in eine Kommazahl um und dabei entstehen dann Ungenauigkeiten.

Gruß,
Waldteufel

PS: Im Übrigen wird diese Ungenauigkeit nie dafür sorgen, dass aus 11 mal 10 oder 12 wird. So genau sind Computer dann doch schon...
  Mit Zitat antworten Zitat