FWIW, in some code I am writing, I considered using 
fixed point decimal numbers but ended up defining a
*currency* type which is an int64 for value + a separate
unit + currency kind. Even if I use a unit of millicent, this
will allow handling amounts close to $100 Trillion. I
don't expect this limit to be a problem for my personal
finances! Performance is not an issue for my use. I
even store all the financial data in text files!

Dealing with stuff such  as currency conversion, interest
rates, stocks etc. gets a bit complicated due to their own
precision needs but for that one can look at existing
practices to do the right thing (which is, be able to accurately
implement the rules your bank etc use).

[Aside:
Ideally this would be done using a *generic* currency
type. Something like

import "currency"
type $ = currency.Type("$")
type £ = currency.Type("£")

var m1 = $(5)
var m2 = $(10)
var m3 = £(2)

m1 + m2 // ok
m2 + m3 // compile time error
m1*m2   // compile time error
m1*5    // ok
m1+5    // compile time error

I doubt go2 will get generics flexible enough for this!
]

> On Nov 28, 2018, at 10:47 PM, robert engels <reng...@ix.netcom.com> wrote:
> 
> For those interesting in financial apps, I have released ‘fixed' at 
> https://github.com/robaho/fixed <https://github.com/robaho/fixed> a high 
> performance fixed-point math library primarily designed for to work with 
> currencies.
> 
> The benchmarks: (Decimal is the shopspring library, big Int/Float are the 
> stdlib)
> 
> BenchmarkAddFixed-8           2000000000               0.83 ns/op            
> 0 B/op          0 allocs/op
> BenchmarkAddDecimal-8          3000000               457 ns/op             
> 400 B/op         10 allocs/op
> BenchmarkAddBigInt-8          100000000               19.2 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkAddBigFloat-8        20000000               110 ns/op              
> 48 B/op          1 allocs/op
> BenchmarkMulFixed-8           100000000               12.4 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkMulDecimal-8         20000000                94.2 ns/op            
> 80 B/op          2 allocs/op
> BenchmarkMulBigInt-8          100000000               22.0 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkMulBigFloat-8        30000000                50.0 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkDivFixed-8           100000000               19.3 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkDivDecimal-8          1000000              1152 ns/op             
> 928 B/op         22 allocs/op
> BenchmarkDivBigInt-8          20000000                68.4 ns/op            
> 48 B/op          1 allocs/op
> BenchmarkDivBigFloat-8        10000000               151 ns/op              
> 64 B/op          2 allocs/op
> BenchmarkCmpFixed-8           2000000000               0.28 ns/op            
> 0 B/op          0 allocs/op
> BenchmarkCmpDecimal-8         100000000               10.8 ns/op             
> 0 B/op          0 allocs/op
> BenchmarkCmpBigInt-8          200000000                8.37 ns/op            
> 0 B/op          0 allocs/op
> BenchmarkCmpBigFloat-8        200000000                7.74 ns/op            
> 0 B/op          0 allocs/op
> BenchmarkStringFixed-8        20000000                99.0 ns/op            
> 16 B/op          1 allocs/op
> BenchmarkStringDecimal-8       5000000               326 ns/op             
> 144 B/op          5 allocs/op
> BenchmarkStringBigInt-8       10000000               209 ns/op              
> 80 B/op          3 allocs/op
> BenchmarkStringBigFloat-8      3000000               571 ns/op             
> 272 B/op          8 allocs/op
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to