>>
ist Bitshift. Jedes Bit Sie rechts verschieben, in der Tat teilt die Anzahl der 2.
Daher (length >> 3)
ist length/8
(abgerundet) und (length >> 6)
ist length/64
.
Nehmen (length/8)+(length/64)
beträgt ca. length*(1/8+1/64)
= length*0.140625
(ungefähr)
1/7 = 0.142857...
Die +1
am Ende für jeden Begriff in +0.5
aufgeteilt werden, so dass length/8
zum nächsten gerundet wird (statt nach unten), und length/64
wird auch auf den nächsten gerundet.
In der Regel können Sie einfach ungefähre 1/y
, wo y = 2^n+-1
mit einer ähnlichen Bit-Shift-Annäherung.
Die unendliche geometrische Reihe ist:
1 + x + x^2 + x^3 + ... = 1/(1 - x)
Multipliziert von x:
x + x^2 + x^3 + ... = x/(1 - x)
Und x = 1/2^n
1/2^n + 1/2^2n + 1/2^3n + ... = (1/2^n)/(1 - 1/2^n)
1/2^n + 1/2^2n + 1/2^3n + ... = (1/2^n)/((2^n - 1)/2^n)
1/2^n + 1/2^2n + 1/2^3n + ... = 1/(2^n - 1)
Substitution Dieser annähert y = 2^n - 1
.
Um y = 2^n + 1
zu approximieren, ersetzen Sie stattdessen x = -1/2^n
.
- 1/2^n + 1/2^2n - 1/2^3n + ... = (-1/2^n)/(1 + 1/2^n)
1/2^n - 1/2^2n + 1/2^3n - ... = (1/2^n)/((2^n + 1)/2^n)
1/2^n - 1/2^2n + 1/2^3n - ... = 1/(2^n + 1)
Dann kürzen Sie einfach die unendliche Reihe auf die gewünschte Genauigkeit.
Welche Division ist rechts-Verschiebung um 3 Äquivalent? –