Autoit - Gleitkommazahlen abrunden

  • Gruß zur Stunde werte AutoIt Gemeinde,
    als ich mich mal mit der allgemeinen Typkonvertierung beschäftigte kam mir die Idee mal zu untersuchen welche Operationen in AutoIt schneller sind.
    Dafür verwendete ich folgendes, weitestgehend selbst erklärendes Script:

    Script


    Da ich in diesem Script auch "Ceiling" untersuchte ist zu sagen, dass diese Variante nur für alle Zahlen außer ganze Zahlen gilt (ist ja logisch, sonst würde die +1 Methode nicht funktionieren). Also nehme ich an, dass keine Ganzzahl vor kommt bzw. wenn eine kommt das nicht behindern soll, da die Rundungsoperationen untersucht werden.
    Bei meinen Tests auf meinem i5-2500k unter Windows 8.1 64 Bit kam folgendes bei raus:
    Dabei wird das Ergebnis wie folgt beschrieben:
    [Blockierte Grafik: http://i.epvpimg.com/OXdRg.png]
    [0] = Floor
    [1] = Int
    [2] = Ceiling
    [3] = Int + 1

    Das Ergebnis bei Ceiling und Int + 1 erwartete ich eigentlich schon, da wir hier 2 Rechenoperationen ausführen und mich das nicht überraschend traf.
    Die Differenz von Floor zu Int hat mich dann allerdings doch überrascht. Wurde dieser Versuch mit 500.000 Zahlen geführt, so beträgt die Abweichung schon 10ms. Bei 50.000 führte ich sie ebenfalls durch, dabei betrug die Differenz 1ms.
    Um ein vernünftiges Ergebnis zu haben würde ich darum bitten dass hier mal ein paar Daten zusammen getragen werden und diese Abweichung nicht nur an meinem System liegt.

    Warum das Ganze?
    Nun - Man wird im Programmieralltag womöglich nie mit so einer Menge an zufälligen Zahlen, die dann auch noch abgerundet werden sollen, zu tun zu haben (zumindest nicht unter AutoIt). Dennoch interessierte mich diese Untersuchung, und als erstes Fazit nach mehreren Messungen kann ich sagen:


    Im Durchschnitt ist die Int Funktion der Floor Funktion zum abrunden vorzuziehen.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    2 Mal editiert, zuletzt von Xorianator (30. November 2015 um 17:57) aus folgendem Grund: Anpassung des Scripts

  • AMD A6-3400M APU (Laptop) @ 2,3Ghz, Win7-64


  • Win xp sp3 auf Core 2 Duo Su 3700 / 4 gig im AkkuModus

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Nachdem ich einige Hintergrundprogramme geschlossen habe, kommt const. folgendes heraus

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • AMD FX-6300 @3,5Ghz, Win7-64

  • Im Durchschnitt ist die Int Funktion der Floor Funktion zum abrunden vorzuziehen.

    Vorsicht - gilt nur für positive Zahlen.
    Bei negativen Zahlen unterscheidet sich das Verhalten!

    Hab es auch mal probiert:


    und hier die Ergebnisse hierzu:

    Code
    Floor:	0.000395 ms
                     Int:	0.000364 ms
                 Ceiling:	0.000390 ms
                 Int + 1:	0.000534 ms
  • Mein Ergebnis:
    Floor: 0.000392 ms
    Int: 0.000372 ms
    Ceiling: 0.000398 ms
    Int + 1: 0.000527 ms

    Gut oder nicht?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Vorsicht - gilt nur für positive Zahlen.Bei negativen Zahlen unterscheidet sich das Verhalten!


    Hallo AspirinJunkie - Selbstverständlich hast du Recht, was das Verhalten von Floor & Int angeht. In dem Falle müsste man ein "Ceiling" wählen.
    Dennoch bleibt der Effekt der gleiche: Das Int ist wieder schneller als die Rundungsoperatin selber.

    Demnach kann man nach wie vor festhalten, dass bei bekanntem Signum und gewolltem Floor / Ceiling die Geschwindigkeit des Int() schneller ist als die Geschwindigkeit von Floor() oder Ceiling().

    @Alina es geht hier nicht darum ob der Rechner schnell oder langsam ist. Ein gutes Ergebnis wäre in dem Fall die Tatsache dass es mit den nativen Floor & Ceiling Operationen schneller als Int ist sind.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (2. Dezember 2015 um 09:16)

  • Code
    Row|Col 0
    [0]|4.77216733004902
    [1]|4.63799240395633
    [2]|4.77562589536138
    [3]|5.79984250855809
    [4]|Nummern: 10000
    [5]|Durchläufe: 100

    Mein System: Intel i7-4790K @ 4,00GHz & 16GB RAM

    LG

    Philip

  • @'Alina
    sprichst Du noch mit mir ? Wenn ich meine Zeiten ansehe bin ich ein altes Aualaufmodel :rofl:

    LG
    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)