Mikro-Benchmark für Gleitkommazahlen zur Potenz von ganzen Zahlen in Ruby

Was ist das?

Ich habe X ** 2 in Ruby 3.0 schneller gelesen und wollte eine Mikrobank, also habe ich eine Mikrobank eingerichtet.

Es steht nicht unter dem Gesichtspunkt der Praktikabilität.

Was zu messen

Ruby ist 2.7.2 und 3.0.0-Vorschau1. Die Umgebung ist macOS Catalina 10.15.6. 2,2 GHz Quad Core Intel Core i7.

Was zu messen

Angenommen, Sie möchten "x" nach der 11. Potenz berechnen. Es gibt die folgenden Methoden.

Name Berechnungsmethode
x**n x**11
x*x*...*x x*x*x*x*x*x*x*x*x*x*x
use variables z=x*x;y=x*z*z;x*y*y
use '**2' ((x**2)**2*x)**2*x

Die ersten beiden sind gut. use variables unternimmt erhebliche Anstrengungen, um die Anzahl der Multiplikationen zu verringern. Ich habe nicht versucht, es mit meiner ganzen Kraft zu reduzieren, so zum Beispiel im Fall von 27 "z = x * x * x; y = z * z; z = x * y * y; x * z * z" 7 Mal Es ist geworden. Wenn ich mein Bestes versuche, wird es wahrscheinlich 6 Mal " z = x * x * x; y = z * z * z; y * y * y "sein, aber ich habe es übersprungen.

Der letzte wird mit viel "** 2" berechnet.

x wird auf 3.0 gesetzt. Ich habe den Index von 2 bis 32 ausprobiert. Wenn der Exponentenwert klein ist, sind "x ** n" und "use" ** 2 "gleich, und" x * x * ... * x "und" use variables "sind ebenfalls gleich.

Ergebnis

Alle Grafiken sind Iterationen pro Sekunde, daher ist die Oberseite schnell. Beachten Sie das Ein-Protokoll-Diagramm.

image.png

Use variables scheint bis zur 10. Potenz schnell zu sein. Bis zur 16. Potenz werden use variables und x ** n herausgezogen. Darüber hinaus ist x ** n schneller.

Wenn man sich die Grafik ansieht, scheint es besser, bis zu "x ** 3" oder "x ** 4" speziell zu behandeln, aber was ist damit?

image.png

Wenn Sie sich "x ** n" ansehen, können Sie sehen, dass 3.0.0-Vorschau1 "** 2" speziell behandelt.

Recommended Posts

Mikro-Benchmark für Gleitkommazahlen zur Potenz von ganzen Zahlen in Ruby
AtCoder ABC 169 C Gleitkomma, das in Ruby passt
Integer # pow wird empfohlen, um die Quadratmethode in Ruby wiederholt zu lösen
Verzeichnisinformationen von DEFAULT_CERT_FILE in Mac Ruby 2.0.0
Liste der Punktschnitte für feinere Punktschnitte
Zusammenfassung der Hashes und Symbole in Ruby
[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Tipps zur Behandlung von gRPC-Fehlern in Ruby