Hallo 1unitedpower,
es ist schon faszinierend, dass toString die ideale Ausgangsbasis für eine Quersumme ist. Die toString-Methode von BigInt dürfte hoch optimiert sein und deutlich effizienter als Divisionen durch 10 oder 1000000 (für meine Block-Quersummen) auf JS-Level.
Wenn ich toString einsetze, kommt mein JS-Script auch auf 0,6µs pro Zahl.
Und mit dieser Methode komme ich unter 0,4µs:
function quersumme(n) {
let digits = n.toString(),
i = digits.length,
q = 0;
while (i > 0) q += digits.charCodeAt(--n)-48;
return q;
}
Interessant ist auch, dass inlining von Funktionen kaum etwas bringt. Entweder macht der JIT-Compiler der JS-Engine das von allein, oder Funktionsaufrufe in JavaScript sind rasend schnell.
Und was mich nun komplett schockiert hat, ist, dass Firefox 80 das gleiche Script in 60% der Zeit absolviert, die Chrome 85 braucht. WTF? Ich dachte, V8 wäre der Maßstab in JS Performance - aber offenbar ist dieser Code Energiefutter für den Spinnenaffen.
Rolf
sumpsi - posui - obstruxi