Skip to content
Go binding of the C decNumber package, for calculation with base-10 floating point numbers
C Go HTML
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
c_original_decnumber_files
cowlishaw_test_files
ICU-license.html
README.md
README_TECHNOTES.TXT
decBasic.c
decCommon.c
decContext.c
decContext.h
decDPD.h first commit Aug 14, 2015
decNumber.c
decNumber.h
decNumberLocal.h
decQuad.c
decQuad.h
decimal128.c
decimal128.h
decimal64.c
decimal64.h
doc.go
mydecquad.c
mydecquad.go
mydecquad.h
mydecquad_run_cowlishaw_test.go
mydecquad_test.go

README.md

decnum

This is a Go binding around C decNumber package, for calculation with base-10 floating point numbers. Decimal data type is important for financial calculations.

The C decNumber package can be found at: http://speleotrove.com/decimal/

The decNumber package used is "International Components for Unicode (ICU)" version.

Documentation of original C decNumber package

http://speleotrove.com/decimal/decnumber.html

More specifically, you should read these topics:

The original C decNumber package contains two kinds of data type:

  • decNumber, which contains arbitrary-precision numbers. Storage will grow as needed.
  • decQuad, decDouble, decSingle, which are fixed-size data types. They are faster than decNumber.

This Go package

The Quad type contains a 128 bits decimal floating point value, and a 16 bits status field.

This Go package only uses the decQuad data type (128 bits), which can store numbers with 34 significant digits. It is very much like the float64, except that its precision is better (float64 has a precision of only 15 digits), and it works in base-10 instead of base-2.

I have only written the following files:

The other .c and .h files in the directory come from the original C decNumber package.

The code of this Go wrapper is quite easy to read, and the pattern for calling C function is always the same. Parameters are always passed from Go to C as value, and in the other direction too. Strings passed from C to Go are are also passed by value, as array in struct. Strings passed from Go to C using C.CString(s).

Installation:

go get github.com/rin01/decnum

Godoc

https://godoc.org/github.com/rin01/decnum

Test

The test file mydecquad_test.go is very instructive.

Run the test:

go test

License

All files in this package are under ICU License (see ICU-license.html).

You can’t perform that action at this time.