Skip to content

Commit

Permalink
Add Copy func (#123)
Browse files Browse the repository at this point in the history
* Add Copy method
Co-authored-by: habuvo <Sin90is0>
  • Loading branch information
habuvo committed Oct 12, 2021
1 parent 4654447 commit 013e52d
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
17 changes: 14 additions & 3 deletions decimal.go
Expand Up @@ -1755,7 +1755,7 @@ func (d Decimal) Sin() Decimal {
sign = !sign
j -= 4
}
z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
zz := z.Mul(z)

if j == 1 || j == 2 {
Expand Down Expand Up @@ -1842,12 +1842,12 @@ var _tanQ = [...]Decimal{

// Tan returns the tangent of the radian argument x.
func (d Decimal) Tan() Decimal {

PI4A := NewFromFloat(7.85398125648498535156e-1) // 0x3fe921fb40000000, Pi/4 split into three parts
PI4B := NewFromFloat(3.77489470793079817668e-8) // 0x3e64442d00000000,
PI4C := NewFromFloat(2.69515142907905952645e-15) // 0x3ce8469898cc5170,
M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi

if d.Equal(NewFromFloat(0.0)) {
return d
}
Expand Down Expand Up @@ -1886,3 +1886,14 @@ func (d Decimal) Tan() Decimal {
}
return y
}

// Copy makes instance of d with same value and different pointer.
func (d Decimal) Copy() Decimal {
d.ensureInitialized()
return Decimal{
value: &(*d.value),
exp: d.exp,
}
}


18 changes: 18 additions & 0 deletions decimal_test.go
Expand Up @@ -3288,3 +3288,21 @@ func ExampleNewFromFloat() {
//0.123123123123123
//-10000000000000
}

//For Copy
func TestCopy(t *testing.T) {
origin := New(1, 0)
cpy := origin.Copy()

if cpy.Cmp(origin) != 0 {
t.Error("copy and origin not equal")
}

//change value
cpy = cpy.Add(New(1, 0))

if cpy.Cmp(origin) == 0 {
t.Error("copy and origin are equal but expected not")
}

}

0 comments on commit 013e52d

Please sign in to comment.