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.
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.
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.
Alle Grafiken sind Iterationen pro Sekunde, daher ist die Oberseite schnell. Beachten Sie das Ein-Protokoll-Diagramm.
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?
Wenn Sie sich "x ** n" ansehen, können Sie sehen, dass 3.0.0-Vorschau1 "** 2" speziell behandelt.
Recommended Posts