Don P: Nächste Zweierpotenz berechnen

Beitrag lesen

Hallo ChrisB,

mich interessierte, wie analog zu meinem Vorschlag im anderen Thread in JavaScript wohl die Stringfunktionen abschneiden wuerden ...

Ach ja, diesen Vorschlag habe ich mangels PHP-Verständnis nicht in JavaScript umgesetzt, zumal es auch mehr um's Zählen von Bits ging.

Ist aber auch interessant. Deine Funktion lässt sich noch wesentlich beschleunigen, wenn man den Test auf Zweierpotenz der Originalzahl aus der donP-Funktion entlehnt und das Potenzieren aus Christians logarithmischer Lösung:

  
var chrisB_neu = function(zahl) {  
  
  if (!((zahl-1)&zahl)) {return zahl;}  // Für Zweierpotenzen gilt: (n-1)&n === 0  
  return 1 << zahl.toString(2).length;  // Zwei hoch Stringlaenge  
}

Zwei Messungen im IE6 haben ergeben:

Newton: 312
Log: 313
ChrisB: 656
ChrisB neu: 500

Newton: 312
Log: 328
ChrisB: 656
ChrisB neu: 485

Stringfunktionen sind halt relativ teuer, aber gegenüber der donP- und der Længlich-Lösung schneidet die Binärstring-Variante (chrisB_neu) doch deutlich besser ab.

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

Stimmt.

b) je nach Browser unterschiedliche Methoden die schnelleren sind.

Das ist aber nicht gut :-( ...

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.

Zitat Spock: "Faszinierend!"
Mein Firefox (2.0.0.11) ist deutlich langsamer als der IE6, aber die Rangfolge der versch. Algorithmen bleibt etwa gleich. Allerdings habe ich im FF zur Zeit viele Tabs offen, vielleicht wirkt sich das auch noch aus.

Welche allgemein ("cross-browser") die performanteste ist, muesste man vermutlich in aufwendigeren Testreihen evaluieren ...

Tja, ich hasse diese Browser-Unterschiede :-(( ...
Wann kommt der Tag (St. Nimmerlein?), ab dem jeder Code cross-browser-fähig *und* vergleichbar performant sein wird?

Gruß, Don P