Marcus B. schrieb:
> ich persönlich kann mir nicht vostellen, dass du genug Zeit mit einer
> Beschleunigung raus bekommst, um die Zeit der ganzen Überprüfungen
> wieder rein zu holen.
Sewh ich auch so.
Diese ganzen Regeln funktionieren nur deshalb, weil wir Menschen
wesentlich schneller Entscheidungen treffen können, als wir rechnen
können. Wir sehen eine Zahl an und 'wissen' ohne lange nachzudenken,
dass die letze Ziffer 5 ist und daher Sonderregeln greifen.
Einem Computer ist das aber egal. Wenn der feststellen soll, ob die
letzte Ziffer 5 ist, muss er erst mal eine Modulo-Division machen.
Super. Erst mal Modulo-Dividieren um rauszufinden ob er für eine
Multiplikation mit 5 den schnellen Weg gehen kann, oder ob die
Multiplikation konventionell durchgeführt werden muss. Das wirds dann
wohl nicht bringen.
> Ausserdem haben die meisten Compiler schon selber Optimierungen dabei-
> am bekanntesten das Shiften wenn es um ganzzahlige(pos und neg!)
> Potenzen von 2 geht.
Jup. Compiler haben für viele Dinge in denen Konstante involviert sind,
spezielle Vorschriften mit, die bei Bedarf zum Einsatz kommen.
zb Multiplikation mit 10
Einfach. 2 mal links shiften, die Originalzahl nochmal dazugezählt und
noch einmal links geshiftet.
Die generischen Algorithmen, die Compiler mithaben sind schwer zu
toppen. Einfacher wird es, wenn man Annahmen und Vereinfachungen treffen
kann, die speziell auf die Aufgabenstellung zugeschnitten sind. Diese
Dinge greifen dann aber erst bei komplizierteren Berechnungen. Eine
Addition oder Multiplikation kriegst du selber auch nicht schneller hin,
als das was der Compiler mit hat. Bei Wurzeln oder trigonometrischen
Funktionen sieht die Sache anders aus. Da müssen die mitgelieferten
Funktionen universell sein und damit auch mit Fällen zurecht kommen, die
in meiner App nicht vorkommen. Und das kann man ausnutzen.