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...