• Stars
    star
    540
  • Rank 82,016 (Top 2 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Arbitrary-precision decimals for Go

apd

apd is an arbitrary-precision decimal package for Go.

apd implements much of the decimal specification from the General Decimal Arithmetic description. This is the same specification implemented by pythonโ€™s decimal module and GCCโ€™s decimal extension.

Features

  • Panic-free operation. The math/big types donโ€™t return errors, and instead panic under some conditions that are documented. This requires users to validate the inputs before using them. Meanwhile, weโ€™d like our decimal operations to have more failure modes and more input requirements than the math/big types, so using that API would be difficult. apd instead returns errors when needed.
  • Support for standard functions. sqrt, ln, pow, etc.
  • Accurate and configurable precision. Operations will use enough internal precision to produce a correct result at the requested precision. Precision is set by a "context" structure that accompanies the function arguments, as discussed in the next section.
  • Good performance. Operations will either be fast enough or will produce an error if they will be slow. This prevents edge-case operations from consuming lots of CPU or memory.
  • Condition flags and traps. All operations will report whether their result is exact, is rounded, is over- or under-flowed, is subnormal, or is some other condition. apd supports traps which will trigger an error on any of these conditions. This makes it possible to guarantee exactness in computations, if needed.

apd has three main types.

The first is BigInt which is a wrapper around big.Int that exposes an identical API while reducing memory allocations. BigInt does so by using an inline array to back the big.Int's variable-length value when the integer's absolute value is sufficiently small. BigInt also contains fast-paths that allow it to perform basic arithmetic directly on this inline array, only falling back to big.Int when the arithmetic gets complex or takes place on large values.

The second is Decimal which holds the values of decimals. It is simple and uses a BigInt with an exponent to describe values. Most operations on Decimals canโ€™t produce errors as they work directly on the underlying big.Int. Notably, however, there are no arithmetic operations on Decimals.

The third main type is Context, which is where all arithmetic operations are defined. A Context describes the precision, range, and some other restrictions during operations. These operations can all produce failures, and so return errors.

Context operations, in addition to errors, return a Condition, which is a bitfield of flags that occurred during an operation. These include overflow, underflow, inexact, rounded, and others. The Traps field of a Context can be set which will produce an error if the corresponding flag occurs. An example of this is given below.

See the examples for some operations that were previously difficult to perform in Go.

Documentation

https://pkg.go.dev/github.com/cockroachdb/apd/v3?tab=doc

More Repositories

1

cockroach

CockroachDB โ€” the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
Go
29,996
star
2

pebble

RocksDB/LevelDB inspired key-value database in Go
Go
4,825
star
3

errors

Go error library with error portability over the network
Go
1,869
star
4

copyist

Mocking your SQL database in Go tests has never been easier.
Go
833
star
5

cockroach-operator

k8s operator for CRDB
Go
264
star
6

docs

CockroachDB user documentation
HTML
177
star
7

django-cockroachdb

CockroachDB Backend for Django
Python
155
star
8

sqlalchemy-cockroachdb

SQLAlchemy adapter for CockroachDB
Python
137
star
9

activerecord-cockroachdb-adapter

CockroachDB adapter for ActiveRecord.
Ruby
101
star
10

rpc-bench

Benchmarking various RPC implementations
Go
87
star
11

examples-orms

Sample uses of CockroachDB with popular ORMs
Go
82
star
12

helm-charts

Helm charts for cockroachdb
Go
81
star
13

examples-go

Sample uses of cockroachDB.
Go
75
star
14

replicator

replicator is a toolkit for ingesting logical replication feeds into a CockroachDB cluster
Go
57
star
15

terraform-provider-cockroach

Terraform provider for CockroachDB Cloud
Go
56
star
16

sequelize-cockroachdb

Use Sequelize and CockroachDB together
JavaScript
52
star
17

cockroachdb-todo-apps

CockroachDB To-Do Apps
Python
51
star
18

c-rocksdb

๐Ÿšซ DEPRECATED
C++
46
star
19

datadriven

Data-Driven Testing for Go
Go
38
star
20

logtags

key/value annotations for Go contexts
Go
35
star
21

cockroach-gen

CockroachDB with pre-generated Go code
Go
33
star
22

movr

A fictional ride sharing company.
Python
32
star
23

loadgen

CockroachDB load generators
Go
30
star
24

k8s

Images and utilities to run cockroach on kubernetes
Go
26
star
25

redact

Utilities to redact Go strings for confidentiality
Go
25
star
26

c-snappy

C++
21
star
27

ui

Published assets for Cockroach Labs user interfaces
TypeScript
20
star
28

cockroachdb-parser

Apache licensed CockroachDB parser and dependencies.
Go
19
star
29

roachprod

Internal CockroachDB production testing tool
Go
15
star
30

crlfmt

Formatter for CockroachDB's additions to the Go style guide.
Go
14
star
31

cockroachdb-typescript

A modern cloud-native web app using TypeScript, React, Prisma, Netlify serverless functions, and CockroachDB
TypeScript
14
star
32

homebrew-tap

`brew install cockroachdb/tap/cockroach`
Ruby
14
star
33

c-protobuf

๐Ÿšซ DEPRECATED: go-gettable version of google/protobuf
C++
13
star
34

watermill-crdb

CockroachDB Pub/Sub for the Watermill project.
Go
13
star
35

molt

Migrate Off Legacy Things - open-source tooling to assist migrations to CockroachDB.
Go
12
star
36

cockroachdb-cloudformation

Quickly setup dev/test CockroachDB clusters using AWS CloudFormation and Kubernetes
Shell
12
star
37

vendored

CockroachDB's vendored Go dependencies
Go
11
star
38

c-jemalloc

๐Ÿšซ DEPRECATED
C
11
star
39

yacc

Fork of go yacc tool with increased hardcoded constants to handle larger grammars.
Go
11
star
40

examples-python

Sample uses of CockroachDB
Python
10
star
41

c-lz4

C
10
star
42

build-cache

Cache the installed output of go builds
Go
9
star
43

definitive_guide_sample_code

Sample code for The Definitive Guide to CockroachDB
JavaScript
8
star
44

quickstart-code-samples

Java
8
star
45

pcf-crdb-service-broker

Pivotal Cloud Foundry service broker for CockroachDB.
Go
8
star
46

dcos-cockroachdb-service

Framework for running CockroachDB on Mesosphere DC/OS
Python
8
star
47

backport

automatically backport pull requests
Go
7
star
48

cockroach-proto

Protocol Buffer
7
star
49

python-heroku-cockroachdb

A modern cloud-native web app using Python, Flask, Heroku, and CockroachDB
Python
7
star
50

walkabout

Walkabout generates visitor-pattern accessors for your existing go structs.
Go
6
star
51

sample-apps

6
star
52

nextjs-react-vercel-crdb-app

A CockroachDB sample app for coordinating social events using Next.js with react-bootstrap deployed on vercel
JavaScript
6
star
53

rksql

Fork of scaledata/rksql
Go
5
star
54

ddshop

TodoMVC app for distributed database workshop
JavaScript
5
star
55

postgres-test

Dockerfile
5
star
56

benchviz

A tool used for visualizing results from benchmark tests over time.
Go
5
star
57

cockroach-cloud-sdk-go

Go client SDK for CockroachDB Cloud
Mustache
5
star
58

stress

A fork of Golang's stress function.
Go
5
star
59

example-app-rust-postgres

Rust
4
star
60

protoc-gen-gogoroach

protoc (protobuf compiler) plugin for CockroachDB protobuf files
Go
4
star
61

efcore.pg.cockroach

C#
4
star
62

generated-diagrams

HTML
4
star
63

roachspeed

codespeed instance
Python
4
star
64

hibernate-savepoint-fix

Java
4
star
65

scripts

Utility and helper scripts for CockroachDB contributors -
Vim Script
4
star
66

go-lab

Scripts and test programs to reveal what happens under the hood in Go.
Go
4
star
67

cockroachdb.github.io

Supporting static content for CockroachDB
JavaScript
3
star
68

cgo_static_boom

cgo static binary boom
Go
3
star
69

docs-docker

Docker image for the docs build
3
star
70

libedit

CockroachDB fork of the libedit terminal line-editing library
3
star
71

yarn-vendored

CockroachDB's vendored JavaScript dependencies
3
star
72

gostdlib

Vendor-friendly Go standard library packages
Go
3
star
73

dev

A utility for performing common CockroachDB development tasks
3
star
74

scp-interview

Shell
3
star
75

university-getting-started-with-sql-app-exercises

Exercise code for the Cockroach University - Getting Started with SQL for Application Developers course
Shell
3
star
76

university-event-driven-architecture-for-java-developers-app-exercises

Exercise code for Cockroach University - Event Driven Architecture for Java Developers
Java
3
star
77

bincheck

Verify CockroachDB binaries
Shell
3
star
78

eddie

Big Eddie, the golang contract enforcer
Go
3
star
79

roachperf-og

๐Ÿšซ Deprecated CockroachDB performance tool โ€” use roachprod instead!
Go
3
star
80

jsonb-spec

Acceptance tests/spec for CockroachDB JSONB support, complement to scoping RFC
JavaScript
3
star
81

social-events-app

JavaScript
3
star
82

example-app-python-psycopg3

Simple CRUD application in Python using the psycopg3 driver.
Python
3
star
83

ttycolor

Conditionally expose ANSI color codes for use on a terminal
Go
2
star
84

fullstack-node-cockroachdb-app

Fullstack sample application in Node.js using Sequelize
JavaScript
2
star
85

rails-crdb-app

A CockroachDB leaderboard sample application using Rails deployed on Heroku
Ruby
2
star
86

university-multi-region-course-app-exercises

exercise code for the cockroach university multi-region course
Java
2
star
87

tokenbucket

Token bucket implementation in Go
Go
2
star
88

go-plus

API library for CRL's custom Go extensions
Go
2
star
89

admin-ui-components

Shared frontend components between the CRDB Admin UI and other apps
TypeScript
2
star
90

build-utils

๐Ÿšซ DEPRECATED: Build utilities for CockroachDB
Go
2
star
91

psycopg2-cockroachdb

Testing psycopg2 against cockroachdb
Shell
2
star
92

katacoda

In-browser, interactive tutorials on CockroachDB
Shell
2
star
93

cockroachdb-hibernate

Package to improve compatibility between CockroachDB and Hibernate
2
star
94

homebrew-go

๐Ÿšซ DEPRECATED ๐Ÿšซ โ€” use `brew install go` instead
Ruby
2
star
95

pulumi-poc

Demo of simple control plane built on top of Pulumi.
Go
2
star
96

s3checker

Check s3 support for bulk operations
Go
1
star
97

avrogen

Avro generator for import testing
Go
1
star
98

redcarpet-extender

Extends the Redcarpet Markdown parser to handle CockroachDB documentation
1
star
99

university-getting-started-with-node-postgres-app-exercises

JavaScript
1
star
100

university-multi-region-latency-exercises

Optimizing latency in multi-region database course exercise code
Shell
1
star