gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

README.md (2479B)


      1 uint128
      2 -------
      3 
      4 [![GoDoc](https://godoc.org/github.com/lukechampine/uint128?status.svg)](https://godoc.org/github.com/lukechampine/uint128)
      5 [![Go Report Card](http://goreportcard.com/badge/github.com/lukechampine/uint128)](https://goreportcard.com/report/github.com/lukechampine/uint128)
      6 
      7 ```
      8 go get lukechampine.com/uint128
      9 ```
     10 
     11 `uint128` provides a high-performance `Uint128` type that supports standard arithmetic
     12 operations. Unlike `math/big`, operations on `Uint128` values always produce new values
     13 instead of modifying a pointer receiver. A `Uint128` value is therefore immutable, just
     14 like `uint64` and friends.
     15 
     16 The name `uint128.Uint128` stutters, so I recommend either using a "dot import"
     17 or aliasing `uint128.Uint128` to give it a project-specific name. Embedding the type
     18 is not recommended, because methods will still return `uint128.Uint128`; this means that,
     19 if you want to extend the type with new methods, your best bet is probably to copy the
     20 source code wholesale and rename the identifier. ¯\\\_(ツ)\_/¯
     21 
     22 
     23 # Benchmarks
     24 
     25 Addition, multiplication, and subtraction are on par with their native 64-bit
     26 equivalents. Division is slower: ~20x slower when dividing a `Uint128` by a
     27 `uint64`, and ~100x slower when dividing by a `Uint128`. However, division is
     28 still faster than with `big.Int` (for the same operands), especially when
     29 dividing by a `uint64`.
     30 
     31 ```
     32 BenchmarkArithmetic/Add-4              2000000000    0.45 ns/op    0 B/op      0 allocs/op
     33 BenchmarkArithmetic/Sub-4              2000000000    0.67 ns/op    0 B/op      0 allocs/op
     34 BenchmarkArithmetic/Mul-4              2000000000    0.42 ns/op    0 B/op      0 allocs/op
     35 BenchmarkArithmetic/Lsh-4              2000000000    1.06 ns/op    0 B/op      0 allocs/op
     36 BenchmarkArithmetic/Rsh-4              2000000000    1.06 ns/op    0 B/op      0 allocs/op
     37 
     38 BenchmarkDivision/native_64/64-4       2000000000    0.39 ns/op    0 B/op      0 allocs/op
     39 BenchmarkDivision/Div_128/64-4         2000000000    6.28 ns/op    0 B/op      0 allocs/op
     40 BenchmarkDivision/Div_128/128-4        30000000      45.2 ns/op    0 B/op      0 allocs/op
     41 BenchmarkDivision/big.Int_128/64-4     20000000      98.2 ns/op    8 B/op      1 allocs/op
     42 BenchmarkDivision/big.Int_128/128-4    30000000      53.4 ns/op    48 B/op     1 allocs/op
     43 
     44 BenchmarkString/Uint128-4              10000000      173 ns/op     48 B/op     1 allocs/op
     45 BenchmarkString/big.Int-4              5000000       350 ns/op     144 B/op    3 allocs/op
     46 ```