expdecay.go raw
1 package blockchain
2
3 /*
4 import "math/big"
5 // Root is a high precision arbitrary fractional root function used for the post p9 hardfork reward calculation
6 func Root(a *big.Float, n float64) *big.Float {
7 limit := Exp(New(2), 256)
8 n1 := n - 1
9 n1f, rn := New(float64(n1)), Div(New(1.0), New(float64(n)))
10 x, x0 := New(1.0), Zero()
11 _ = x0
12 for {
13 potx, t2 := Div(New(1.0), x), a
14 for b := n1; b > 0; b >>= 1 {
15 if b&1 == 1 {
16 t2 = Mul(t2, potx)
17 }
18 potx = Mul(potx, potx)
19 }
20 x0, x = x, Mul(rn, Add(Mul(n1f, x), t2))
21 if Lesser(Mul(Abs(Sub(x, x0)), limit), x) {
22 break
23 }
24 }
25 return x
26 }
27 func Abs(a *big.Float) *big.Float {
28 return Zero().Abs(a)
29 }
30 func Exp(a *big.Float, e uint64) *big.Float {
31 result := Zero().Copy(a)
32 for i := uint64(0); i < e-1; i++ {
33 result = Mul(result, a)
34 }
35 return result
36 }
37 func New(f float64) *big.Float {
38 r := big.NewFloat(f)
39 r.SetPrec(256)
40 return r
41 }
42 func Div(a, b *big.Float) *big.Float {
43 return Zero().Quo(a, b)
44 }
45 func Zero() *big.Float {
46 r := big.NewFloat(0.0)
47 r.SetPrec(256)
48 return r
49 }
50 func Mul(a, b *big.Float) *big.Float {
51 return Zero().Mul(a, b)
52 }
53 func Add(a, b *big.Float) *big.Float {
54 return Zero().Add(a, b)
55 }
56 func Sub(a, b *big.Float) *big.Float {
57 return Zero().Sub(a, b)
58 }
59 func Lesser(x, y *big.Float) bool {
60 return x.Cmp(y) == -1
61 }
62 */
63