MCPcopy Index your code
hub / github.com/cockroachdb/apd

github.com/cockroachdb/apd @v3.2.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.2.3 ↗ · + Follow
398 symbols 2,028 edges 26 files 237 documented · 60% 35 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

String
called by 124
bigint.go
Cmp
called by 104
bigint.go
inner
called by 102
bigint.go
Set
called by 82
bigint.go
NewBigInt
called by 77
bigint.go
SetString
called by 73
bigint.go
updateInner
called by 40
bigint.go
goError
called by 40
context.go

Shape

Method 205
Function 171
Struct 15
TypeAlias 4
FuncType 2
Interface 1

Languages

Go100%

Modules by API surface

bigint_test.go86 symbols
bigint.go77 symbols
decimal.go39 symbols
context.go35 symbols
decimal_test.go29 symbols
error.go25 symbols
condition.go17 symbols
gda_test.go15 symbols
round.go14 symbols
decomposer_test.go9 symbols
format.go7 symbols
table_test.go6 symbols

Datastores touched

apdDatabase · 1 repos

For agents

$ claude mcp add apd \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact