/ ds-math Public

Safe arithmetic

# dapphub/ds-math

Switch branches/tags
Nothing to show

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

## Latest commit

`e70a364`

## Files

Failed to load latest commit information.
Type
Name
Commit time
Jul 29, 2021
Jun 24, 2020
Mar 29, 2017
Apr 19, 2017
Nov 3, 2017
Mar 29, 2017
Feb 7, 2018
May 8, 2018

## DSMath

Safe Arithmetic

DS-Math provides arithmetic functions for the common numerical primitive types of Solidity. You can safely add, subtract, multiply, and divide `uint` numbers without fear of integer overflow. You can also find the minimum and maximum of two numbers.

Additionally, this package provides arithmetic functions for new two higher level numerical concepts called wad (18 decimals) and ray (27 decimals). These are used to represent fixed-point decimal numbers.

A wad is a decimal number with 18 digits of precision and a ray is a decimal number with 27 digits of precision. These functions are necessary to account for the difference between how integer arithmetic behaves normally, and how decimal arithmetic should actually work. A brief example using `wmul`, which returns the product of a wad and another number:

```1.1 * 2.2 == 2.42

//Regular integer arithmetic adds orders of magnitude:

110 * 220 == 24200

wmul(1.1 ether, 2.2 ether) == 2.42 ether```

### Naming Convention

The standard functions are the `uint` set, so their function names are not prefixed: `add`, `sub`, `mul`, `min`, and `max`. There is no `div` function, as divide-by-zero checking is built into the Solidity compiler.

The `int` functions have an `i` prefix: `imin`, and `imax`.

Wad functions have a `w` prefix: `wmul`, `wdiv`.

Ray functions have a `r` prefix: `rmul`, `rdiv`, `rpow`.

### API Reference

#### `add`

Return `x + y` or an exception in case of `uint` overflow.

#### `sub`

Return `x - y` or an exception in case of `uint` overflow.

#### `mul`

Return `x * y` or an exception in case of `uint` overflow.

#### `min`

Return the smaller number of `x` and `y`.

#### `max`

Return the larger number of `x` and `y`.

#### `imin`

Return the smaller number of `x` and `y`.

#### `imax`

Return the larger number of `x` and `y`.

#### `wmul`

Multiply two Wads and return a new Wad with the correct level of precision. A Wad is a decimal number with 18 digits of precision that is being represented as an integer.

#### `wdiv`

Divide two Wads and return a new Wad with the correct level of precision. A Wad is a decimal number with 18 digits of precision that is being represented as an integer.

#### `rmul`

Multiply two Rays and return a new Ray with the correct level of precision. A Ray is a decimal number with 27 digits of precision that is being represented as an integer.

#### `rdiv`

Divide two Rays and return a new Ray with the correct level of precision. A Ray is a decimal number with 27 digits of precision that is being represented as an integer.

#### `rpow`

Raise a Ray to the n^th power and return a new Ray with the correct level of precision. A Ray is a decimal number with 27 digits of precision that is being represented as an integer.

Safe arithmetic

## Releases

No releases published

## Packages 0

No packages published