add Pow()

This commit is contained in:
Martin Lindhe 2016-09-19 23:54:54 +02:00
parent d6f52241f3
commit 8a97b04143
2 changed files with 25 additions and 0 deletions

View file

@ -301,6 +301,22 @@ func (d Decimal) Mod(d2 Decimal) Decimal {
return d.Sub(d2.Mul(quo)) return d.Sub(d2.Mul(quo))
} }
// Pow returns d to the power d2
func (d Decimal) Pow(d2 Decimal) Decimal {
var temp Decimal
if d2.IntPart() == 0 {
return NewFromFloat(1)
}
temp = d.Pow(d2.Div(NewFromFloat(2)))
if d2.IntPart()%2 == 0 {
return temp.Mul(temp)
}
if d2.IntPart() > 0 {
return temp.Mul(temp).Mul(d)
}
return temp.Mul(temp).Div(d)
}
// Cmp compares the numbers represented by d and d2 and returns: // Cmp compares the numbers represented by d and d2 and returns:
// //
// -1 if d < d2 // -1 if d < d2

View file

@ -1025,6 +1025,15 @@ func TestDecimal_Cmp2(t *testing.T) {
} }
} }
func TestPow(t *testing.T) {
a := New(4, 0)
b := New(2, 0)
x := a.Pow(b)
if x.String() != "16" {
t.Errorf("Error, saw %s", x.String())
}
}
func didPanic(f func()) bool { func didPanic(f func()) bool {
ret := false ret := false
func() { func() {