[ gelöst ] AutoIt Rechenfehler???

  • Hallo,
    schaut euch mal folgendes Skript an, beenden könnt ihr es durch das Tray Icon.

    [autoit]


    $zahl = 1
    While 1
    MsgBox(0, "", $zahl)
    $zahl += 0.1
    WEnd

    [/autoit]

    Wenn man sich das Skript anschaut, sieht es so aus, als ob einfach zu einer 1 immer 0.1 dazugezählt wird, und diese Zahl dann ausgegeben wird.
    Wenn man das Skript dann ausführt, sieht es am Anfang auch so aus, doch dann, bei 6.1, ist die nächste Zahl plötzlich 6.19999999999999.
    Das geht dann so bis ungefähr 10, dann geht es wieder normal weiter.

    Kann mir einer sagen, woran das liegt?? ?(
    Anscheinend wird da irgendetwas falsch gerundet.

  • Ist kein AutoIt-Problem sondern ein allgemeines Computerproblem bei der Berechnung von Gleitkommazahlen.
    Das Problem ist die Darstellung von Gleitkommazahlen im Binärsystem.
    Die Nachkommastellen dort sind 2er Potzenzen als Quotienten von 1.
    (Ich weiß das ist jetzt scheiße erklärt - man muss es einfach mal gesehen haben...)
    Kurz und knapp: Der Computer kann 0,1 nicht darstellen - er kann es nur so nah wie möglich runden - und irgendwann summiert sich der Rundungsfehler soweit auf dass es einen Sprung an der nächsten Stelle gibt.
    Ich hatte hier auch irgendwo mal eine kleine Funktion gepostet wo man den Rundungsfehler empirirsch bestimmen kann.
    Er ist vor allem von 32bit bzw. 64bit abhängig.

  • [autoit]

    $zahl = 1
    While 1
    MsgBox(0, "", $zahl)
    $zahl = Round($zahl + 0.1,1)
    WEnd

    [/autoit]

    Soltte hier abhilfe schaffen ^^

    mfg Ubuntu