DSP: Power of Two Approximation
Posted: Wednesday 3rd July 2019 2:53am
This is in support of my answer here:
https://www.dsprelated.com/thread/8959/ ... nentiation
The following program shows how to calculate an approximation of two raised to a float value. The argument is assumed to be positive.
https://www.dsprelated.com/thread/8959/ ... nentiation
The following program shows how to calculate an approximation of two raised to a float value. The argument is assumed to be positive.
' Gambas module file
Private Lookup_V As New Float[]
Private Lookup_L As New Float[]
Private Ln2 As Float
'========================================================================
Public Sub Main()
Dim v, ev As Float
v = 1 / 32
Do
ev = Exp(v)
Lookup_V.Add(v)
Lookup_L.Add(ev)
Print v, ev
v += 1 / 16
Loop Until ev > 2.0
Ln2 = Log(2)
Print 2 ^ (0.5), Sqr(2.0), TwoToPower(0.5)
End
'========================================================================
Sub TwoToPower(x As Float) As Float
Dim n, bbbb As Integer, f, v, y, ey As Float
n = Int(x)
f = x - n
v = Ln2 * f
bbbb = Int(16 * v)
y = v - Lookup_V[bbbb]
ey = 1 + y * (1 + y * (1 / 2 + y / 6))
Print y, Exp(y), ey
Return 2 ^ n * Lookup_L[bbbb] * ey
End
'========================================================================
Here is the output:Code: Select all
0.03125 1.0317434074991
0.09375 1.09828514030783
0.15625 1.1691184461695
0.21875 1.2445201077661
0.28125 1.32478475872887
0.34375 1.41022603492571
0.40625 1.50117780000012
0.46875 1.59799544995063
0.53125 1.7010573018484
0.59375 1.81076607211939
0.65625 1.92755045016754
0.71875 2.05186677348798
0.002823590279973 1.00282758036558 1.00282758036293
1.4142135623731 1.4142135623731 1.41421356236936