ChrisB: Nächste Zweierpotenz berechnen

Beitrag lesen

Hi,

die Optimierungen der Funktionen im weiteren Threadverlauf hab ich jetzt mal aussen vor gelassen - mich interessierte, wie analog zu meinem Vorschlag im anderen Thread in JavaScript wohl die Stringfunktionen abschneiden wuerden ...

var chrisB = function(zahl) {  
 var bin = zahl.toString(2); // Binaerstring erzeugen  
 if(bin.lastIndexOf("1")) {  // wenn nicht erste Stelle (0) die letzte "1" enthaelt  
  return Math.pow(2, bin.length);  // Zwei hoch Stringlaenge  
 }  
 else {  
  return zahl;  
 }  
}

Hier ein paar typische Messergebnisse für jeweils 60000 Berechnungen (JavaScript) in ms:

Beim Messen faellt auf, dass
a) die Ergebnisse sich zwischen mehreren Testlaeufen signifikant unterscheiden koennen (war zu erwarten), bis hin dazu, dass die "Platzierung" der einzelnen Algorithmen wechselt - es sind also immer mehrere Testlaeufe noetig, um eine Tendenz ablesen zu koennen, und
b) je nach Browser unterschiedliche Methoden die schnelleren sind.

(Hab mal nur die letzte Testreihe mit 1073681823 bis 1073741823 ausfuehrlicher getestet.)

Mein Vorschlag kackt im Opera (9.24) deutlich ab (newton < laenglich < donP << chrisB),
im IE 7 ist der donP deutlich am langsamsten (newton < laenglich < chrisB << donP),
im Safari (3.0.4/Win) liegen newton und chrisB etwa gleichauf, laenglich etwas langsamer, donP deutlich abgeschlagen -
und im Firefox (2.0.0.11) "gewinnt" chrisB eigentlich immer vor newton und laenglich, donP auch hier wieder etwas abgeschlagen.

Wie man sieht, haengt es also nicht nur vom Algorithmus ab, sondern auch von der JavaScript-Engine, was wirklich jeweils die schnellste Methode ist.
Welche allgemein ("cross-browser") die performanteste ist, muesste man vermutlich in aufwendigeren Testreihen evaluieren ...

MfG ChrisB