Commit graph

117 commits

Author SHA1 Message Date
Philip Dubé
d538aec685 remove copy, don't need Abs(d.value)
9007199254740992 converts to float64
2024-04-03 21:15:48 +00:00
Philip Dubé
0a79029c95 feedback, fixes bug 2024-04-03 21:15:48 +00:00
Philip Dubé
afe2a66041 Optimize NumDigits
Dividing BitLen by math.Log2(10) is what math/big does underneath

Not including the Int64/Uint64 check makes this slightly slower than old method

Included 2 benchmarks, for 10 digit numbers & 100 digit numbers:

-- before
> go test -bench=NumDigit -run=NumDigit
goos: linux
goarch: amd64
pkg: github.com/shopspring/decimal
cpu: AMD Ryzen 7 7840U w/ Radeon  780M Graphics
BenchmarkDecimal_NumDigits10-16     	18317293	        63.87 ns/op
BenchmarkDecimal_NumDigits100-16    	 3645015	       329.6 ns/op

-- after
...
BenchmarkDecimal_NumDigits10-16     	143781325	         8.488 ns/op
BenchmarkDecimal_NumDigits100-16    	 5931247	       207.4 ns/op
2024-04-03 21:15:48 +00:00
Philip Dubé
547861c49b
Avoid reallocation of initial slice in MarshalBinary (GobEncode) (#355) 2024-04-03 22:12:19 +02:00
Mateusz Woś
78289cc844
Add improved implementation of power operation (#358)
* Adjust Pow implementation
* Add PowWithPrecision method
* Add PowInt32 method
* Add PowBigInt method
2024-04-03 00:16:27 +02:00
Mateusz Woś
2b68c56fe0
Adjust Ln method to prevent infinity iteration loops (#357)
* Adjust Ln method to prevent infinity iteration loops
* Add test case for infinity loop
2024-04-01 22:02:25 +02:00
Dovydas
d00399e161
Add NewFromBigRat constructor (#288) 2024-02-19 23:13:43 +01:00
Andrei Tudor Călin
57a340d853
Add Compare method which forwards calls to Cmp (#346)
Given the interface definition

	type Ordered[T any] interface {
		Compare(T) int
	}

And the type constraint T Ordered[T], make decimal.Decimal satisfy this
constraint, so that generic code written against T Ordered[T] can work
with decimal values as smoothly as it works with time.Time values today.

Fixes: #345
2024-01-24 23:48:15 +01:00
Chris Belsole
b79c571f80
Removed unnecessary min function for RescalePair method (#265)
Co-authored-by: Chris Belsole <chris.belsole@homelight.com>
2024-01-15 20:56:38 +01:00
Frank
b844c58a71
Fix overflow edge case in QuoRem method (#322) 2024-01-15 20:52:54 +01:00
Feras AlSaffar
142a0cf2f2
Use Godoc standard to mark deprecated Equals and StringScaled methods(#342) 2024-01-15 20:50:05 +01:00
zlasd
7b4ffbcd3c
Fix mod when the divisor is slightly greater than the half of dividend (#312) (#317) 2024-01-10 02:08:45 +01:00
zlasd
1df8fb3015
Ensure empty Decimal returns correct zero-value NumDigits (#301) 2023-12-31 13:11:33 +01:00
Jongmin Kim
572d78e32d
Fix examples for RoundDown, RoundFloor, RoundUp, and RoundCeil (#341) 2023-12-29 18:47:57 +01:00
Mateusz Woś
12e9241da2
Add implementation of natural logarithm (#339)
* Add initial implementation of natural logarithm
* Add constApproxmation struct to represent mathematical constants with their approximations
2023-12-29 01:59:48 +01:00
mwoss
88705b71ce Reformat documentation to current go standard 2023-12-28 21:05:09 +01:00
Vadim Kulagin
6926256b71
Allocate new(big.Int) in Copy method to deeply clone it (#278) 2023-12-27 15:53:43 +01:00
Mateusz Woś
fa3b22f4d4
Fix incorrect calculation of decimal modulo (#258) 2021-10-21 11:22:23 +02:00
lmittmann
bc96f543c2
Reduce memory allocation in case of initialization from big.Int (#252)
* reduced allocs in NewFromBigInt(...) from 3 -> 2
* remaining `big.NewInt(0).Set(...)` -> `new(big.Int).Set(...)`
2021-10-20 13:11:07 +02:00
Gaylor Bosson
cd57bf11a4
Fix binary marshalling of decimal zero value (#253)
* Fix binary marshalling of zero value
* Adapt the error message of BinaryUnmarshal
2021-10-20 12:49:41 +02:00
Mateusz Woś
283b007e5f
Reformat code base and update decimal copy docs (#249) 2021-10-12 12:11:39 +02:00
Ruben de Vries
3259e0a2de
Add NewNullDecimal init method (#234) 2021-10-12 11:07:45 +02:00
Ilya Glukhov
013e52d4e9
Add Copy func (#123)
* Add Copy method
Co-authored-by: habuvo <Sin90is0>
2021-10-12 02:17:36 +02:00
Mateusz Woś
46544472a5
Add implementation of natural exponent function (Taylor, Hull-Abraham) (#229)
* Add implementation of natural exponent function (Taylor, Hull-Abraham)
* Update docs
* Improve docs, handle multithreading race condition in exp method
2021-10-11 18:39:38 +02:00
Mateusz Woś
b11a7c46d7
Add implementation of CoefficientInt64 method (#244)
* Add implementation of CoefficientInt64 method
2021-09-10 15:48:44 +02:00
Denis
483a047db9
Improve performance of Abs() and Round() (#240) 2021-09-09 13:03:13 +02:00
James Harris
cc4584f0a5
Add slice range checks to UnmarshalBinary() (#232)
* Add slice range checks to `UnmarshalBinary()`.
* Avoid use of `%w` verb with `Errorf()` for compatibility with older Go versions.
2021-06-23 00:24:56 +02:00
Felipe Neuwald
501661573f
Add InexactFloat64 method (#205)
* Add func (d Decimal) MustFloat64()
* renames MustFloat64 to InexactFloat64
2021-03-30 01:12:37 +02:00
Vu Long (Drake)
f77bb07828
Modify Rounding methods (#220)
* Change function name from RoundUp -> RoundCeil, RoundDown -> RoundFloor
* Add a new RoundUp and RoundDown methods
* Modify the docs of RoundUp and RoundDown
2021-03-14 22:09:56 +01:00
Bharath Ramesh
9328d16578
Added XML support for NullDecimal (#192)
* Added UnmarshalText and MarshalText support for NullDecimal
* Add tests for XML operations on NullDecimal
2021-02-18 23:32:50 +01:00
Vu Long (Drake)
99f4d74cf2
Fix wrong return RoundUp/RoundDown because of value after rescaled is ignore (#202) 2021-01-18 00:50:46 +01:00
nknordeen
0cada0bdfe
optimize NewFromString a bit (#198)
* optimize NewFromString a bit

* add benchmark for large number

Co-authored-by: Nicholas Nordeen <nnordeen@fanatics.com>
2021-01-09 23:15:12 -05:00
Mateusz Woś
8bd41ac55d
Implement RoundUp and RoundDown methods (#196)
* Implement RoundUp and RoundDown methods
2020-12-11 13:41:11 -05:00
Mateusz Woś
ebbf8bbe36
Implement new initialization function - NewFromFormattedString (#184)
* Implement new initialization function - NewFromFormattedString
* Redefine docstring
2020-09-14 19:29:03 +02:00
mwoss
5a22b86679 Fix documentation in RoundBank method 2020-08-20 23:47:45 +02:00
Mateusz Woś
6fe01c1abd
Implement IsInteger method (#179) 2020-07-01 01:20:32 +02:00
Mateusz Woś
480f653de8
Update documentation, clean up package level documentation (#173)
* Update documentation, clean up package level documentation
2020-04-27 22:35:36 -04:00
Mateusz Woś
c939845a68
Improve go report cards score (#174)
* Improve go report cards score
2020-04-27 02:03:21 -04:00
Mateusz Woś
1884f454f8
Add new helper methods: BigInt, BigFloat (#171)
* Add new helper methods: BigInt, BigFloat
* Add few tests cases showing loss of precision after casting
2020-04-20 00:29:39 +02:00
Jason Biegel
02e2044944
Revert remove insignificant digits (#159)
* revert original remove insignificant change (PR 46), and add the logic back as a function
2020-02-27 15:28:07 -05:00
Jason Biegel
6c07c6ca86
remove 15 interval RoundCash (#166)
* remove 15 interval RoundCash

* update function doc

* Remove comments and benchmark referring interval 15

Co-authored-by: Mateusz Woś <wos.mateusz16@gmail.com>
2020-02-25 19:44:03 -05:00
Mateusz Woś
408a2507e1
Remove unnecessary decimal rescaling - memory usage optimization (#160)
* Remove unnecessary decimal rescaling

* Move benchmarks to separate file, add new benchmark tests
2020-01-06 00:12:15 +01:00
Jason Biegel
96defcb63c Run go fmt (#162) 2020-01-05 15:46:53 +01:00
Mathieu Post
bc70c3beb9 Add NewFromInt and NewFromInt32 (#72)
Add NewFromInt and NewFromInt32
2019-11-29 00:17:06 -05:00
Jason Biegel
f1972eb1d1
Merge pull request #137 from lantw44/master
Fix decoding of .0
2019-10-08 22:57:16 -04:00
coldWater
62587fc365
fix: Coefficient panic
call Coefficient on uninitialized Decimal will panic
2019-06-17 18:13:00 +08:00
Ting-Wei Lan
f39378d939 Fix decoding of .0
Since trailing 0 digits after the decimal point are trimmed, intString
becomes an empty string when there is no digit before the decimal point
and all digits after the decimal point is 0, causing big.Int SetString
to fail because there is no string to parse.

Fix #134.
2019-02-19 17:00:26 +08:00
Klaus Post
cd690d0c9e Make NewFromFloat respect the precision of the input (#100)
* Make NewFromFloat respect the precision of the input

Restores the previous behaviour where input converted from float is truncated at the precision of the float.

The precision is depending on the actual value. Simply making it 15 digits would make it faster, but would in some cases lose some precision. So the code from the stdlib that does this calculation (very well) has been included.

Lots of good articles here: https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/

Performance is around the same as the previous string roundtrip since it basically does the same, but allocations are a bit less.

`BenchmarkNewFromStringFloat` is the old method, `BenchmarkNewFromFloat` is the new.

```
BenchmarkNewFromFloatWithExponent-8     10000000               260 ns/op             174 B/op          4 allocs/op
BenchmarkNewFromFloat-8                  2000000               744 ns/op              90 B/op          2 allocs/op
BenchmarkNewFromStringFloat-8            2000000               822 ns/op             258 B/op          6 allocs/op
```

* Update Sin/Tan/Cos tests.
2018-07-09 16:31:17 -04:00
Ian Norden
7e43aed1c9 Added cos, sin, tan, and atan methods and tests (#96)
* Added Atan method

* added sin and cos methods

* added tests for atan, sin, and cos

* tan method and test

* potentinal fix for './decimal_test.go:261:6: d declared but not used' error thrown by the tip version Travis CI tests + corrected comment in decimal.go
2018-07-09 10:22:25 -04:00
José David Arévalo
19e3cb6c29 add functions IsPositive, IsNegative and IsZero (#88) 2018-06-07 10:48:47 -04:00