• Hab meine Version jetzt erweitert:

    Kommt ohne _BigInt_Load und _BigInt_Print aus, d.h. die Rechenfunktionen können direkt verwendet werden
    Negative Zahlen (z.b. "-1355") werden berücksichtigt
    _BigInt_Sub und _BigInt_Div wurden hinzugefügt
    _BigInt_Div($a,$b,$Dec=0): $Dec = Anzahl der Dezimalstellen, wenn 0 dann normaler Rest - wird als extra Variable zurückgegeben

    Die Laufzeiten bei 50 Rechenoperationen mit zufälligen (auch negativen) Zahlen mit einer Länge von 10-90 Stellen:
    Add: 15.9071
    SUB: 17.6079
    MUL: 209.5421
    DIV: 1479.0203

    Scriptgröße: 7.665 Bytes

    Die Laufzeiten mit benchmark_speed.au3:
    Average: 0.078
    Minimum: 0.076
    Maximum: 0.081

    8)

    So, nun werd ich mal probieren, wie klein ich meine Version 4 machen kann...

    lgE

  • mööp

    du darfst load und print aber nicht weg lassen xD

    es muss mindestens:

    [autoit]


    func _BigInt_Print($a)
    return $a
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func _BigInt_Load($a)
    return $a
    EndFunc

    [/autoit]

    sein ;)

    • Offizieller Beitrag

    Ich habe noch etwas gegrübelt und optimiert. Zeitmäßig war das lediglich eine Millisekunde. :wacko:
    Scriptgröße jetzt bei: 1081 Bytes (immerhin). Download: Post#24

    Ich habe keine Ahnung, was ich da jetzt noch an Bytes einsparen könnte. Und mein Script ist mehr als doppelt so groß, wie das von Azunai. ?(

    Das schlimme ist, mir fällt auch keine Version ein, die langsamer aber dafür kürzer ist. :huh:

    Walle, wie sieht's mit einer neuen Hochrechnung aus?

  • Zitat

    Das schlimme ist, mir fällt auch keine Version ein, die langsamer aber dafür kürzer ist. :huh:

    tja

    mein problem ist, ich komm nicht annähernd an eure zeiten dran...
    also mathematisch hab ich nun schon viele methoden probiert... aber mir fällt nichts mehr ein..
    mal meinen info lehrer anpumpen ^^

    • Offizieller Beitrag

    Mir raucht der Kopf! :D

    Nach stundenlangen ändern, testen und wieder ändern habe ich jetzt doch zwei Scripte (ein schnelles und ein "kurzes").

    Das Schnelle liegt nun bei 1133 Bytes und 0.047s (geschätzt ca. 0.062s bei Walle) und das Kurze hat nun "nur" noch 993 Bytes.

    Download: Post#24

    Ich möchte aber noch eine Anregung loswerden, die ich beim Testen bemerkt habe. Wir sollten in "benchmark_speed.au3" zwei Zeilen einfügen:

    [autoit]


    #include <myBigInt_speed.au3>
    #include <Assert.au3>
    ProcessSetPriority('AutoIt3.exe',5) ; diese
    ProcessSetPriority('AutoIt3Wrapper.exe',5) ; und diese Zeile
    [...]

    [/autoit]


    Damit sind die Ergebnisse wesentlich stabiler und reproduzierbarer.

  • Hi

    Es is absolut nervig sich ständig hier durch diesen rießen Thread zu klicken und nach den aktuellen Archiven zu suchen, dann ins PN Postfach zu schauen, dass PW zu suchen, danach das Archiv zu entpacken, anschließend die Datei noch umzubennen und dann erst anfangen zu können.

    Deshalb, auf grund der großen Beteiligung in diesem Monat, folgende Änderung:
    Jeder schickt mir bitte sein Skript als au3 Datei mit dem Namen "myBigInt_size.au3" sowie eine weitere "myBigInt_speed.au3". Wenn ihr nur eine auf eine Kategorie optimierte Datei habt müsst ihr diese dann halt einfach verdoppeln und entsprechend umbenennen.

    Sry, aber das ist sonst echt jedes Mal ein rießen Aufwand nur um die paar Sekunden zu benchen.

    Sobald ich die entsprechenden PNs habe mache ich den nächsten Benchmark.


    Walle

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Aktuelle Werte, der User, die meinem Wunsch nachgekommen sind, mir ihr Skript per PN zu schicken.

    Azunais Skript, war leider ncht lauffähig...Selbst nach einer Minute warten kam einfach keine Box mit dem Ergebniss. Sowohl speed als auch size. Auch stand im Scite unten nichts von passed test...kA was das ist.


    eukalyptus:
    Average: 0.0385 sec.
    Minimum: 0.0336 sec.
    Maximum: 0.0448 sec.
    590 Bytes

    Oscar:
    Average: 0.0461 sec.
    Minimum: 0.0392 sec.
    Maximum: 0.0542 sec.
    724 Bytes

    pee:
    Average: 0.0780 sec.
    Minimum: 0.0689 sec.
    Maximum: 0.0897 sec.
    607 Bytes

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Danke für die Auswertung!

    UND: ich leg gleich nochmals nach:

    aktueller SpeedWert:
    *trommelwirbel*
    0.027 (0.019 ADD 0.008 MUL)

    bei Walle darf ich da mit etwa 0.025 rechnen!!!

    Ich hoffe, ich verderbe jetzt niemanden den Spaß und hoffe doch sehr, daß ihr mich noch jagen werdet!
    für mich war es jedenfalls die letzte Optimierung, mehr geht nicht - das ende der Fahnenstange ist definitiv erreicht!

    lgE

  • Naja, ICH bin am ende.
    Wenn du, Pee, mein Script siehst, kannst du sicher noch ein paar ms rausholen, aber ich hab mein maximum erreicht!
    und solltest du bis zum Abgabetermin noch die mathematischen Feinheiten rausfinden, welche ich (und ich glaube auch Oscar) ausnützen, dann seh ich schwarz für mich ;)

    Ansonsten: Pack doch einfach die Zeile "$Time=Timerinit()" in dein Script und schon bist du der Schnellste! :rofl:

    Ich geb euch mal ein paar Hinweise:

    Ich verwende die Schulmethode, allerdings etwas umgeformt.
    Mein Script würde fehlerhaft laufen, wenn z.b. eine Zahl den Wert 9999999999999999999999 hätte.
    Ich verwende bei _BigInt_Mul NICHT _BigIntAdd.
    Nur bei einer der beiden Funktionen splite ich die Zahl in ein Array.

    Das war jetzt wahrscheinlich schon zuviel!

    lgE

    • Offizieller Beitrag
    Zitat

    Mein Script würde fehlerhaft laufen, wenn z.b. eine Zahl den Wert 9999999999999999999999 hätte.

    Das habe ich doch in den Tests drin, oder? Sollte schon funktionieren, sonst ist es ja witzlos :D.
    Ich bin mir inzwischen auch fast sicher, dass wir verschiedene Ansätze haben... bei 0,07 ist bei mir nämlich Schluss. Das kann mal also vielleicht später noch kombinieren ;).

    Aber Mul ohne Add ist mir gerade ein völliges Rätsel :(.

    peethebee

    • Offizieller Beitrag

    Naja, in diese Minimalbereiche kann ich mit meiner Methode nicht vorstoßen - die ist bei 0.12 ausgereizt.
    Und solange mir kein anderer Algorithmus einfällt bleibt es also dabei. :S

    Bin ja gespannt, wie man multipliziert ohne zu addieren. Letztlich liegt doch jeder Rechenoperation eine Addition zugrunde. :wacko:

  • Naja, in diese Minimalbereiche kann ich mit meiner Methode nicht vorstoßen - die ist bei 0.12 ausgereizt.
    Und solange mir kein anderer Algorithmus einfällt bleibt es also dabei. :S

    Bin ja gespannt, wie man multipliziert ohne zu addieren. Letztlich liegt doch jeder Rechenoperation eine Addition zugrunde. :wacko:

    Ich hab ja nicht behauptet NICHT zu addieren, sondern ich verzichte auf _BigInt_Add!
    Na, klingelt´s?
    :rolleyes:

  • Zitat

    Azunais Skript, war leider ncht lauffähig...Selbst nach einer Minute warten kam einfach keine Box mit dem Ergebniss. Sowohl speed als auch size. Auch stand im Scite unten nichts von passed test...kA was das ist.

    dude, dauert nur lange ^^ rechnen tut er ;)
    kannst ja aus testgründen ein paar kleinere zahlen zwischen die großen packen um zu sehen ob mein script noch läuft ;)
    speed hab ich ganz klar verkakt ^^ hab einfach size in speed umbennant weil ich kein speed script habe ^^