Exponential

Exp is a struct which stores decimals with a fixed precision of 18 decimal places. Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:Exp({mantissa: 5100000000000000000}).

Legacy contract for compatibility reasons with existing contracts that still use MathError

getExp

function getExp(uint256 num, uint256 denom) internal pure returns (enum CarefulMath.MathError, struct ExponentialNoError.Exp)

Creates an exponential from numerator and denominator values. Note: Returns an error if (num * 10e18) > MAX_INT, or if denom is zero.

addExp

function addExp(struct ExponentialNoError.Exp a, struct ExponentialNoError.Exp b) internal pure returns (enum CarefulMath.MathError, struct ExponentialNoError.Exp)

Adds two exponentials, returning a new exponential.

subExp

function subExp(struct ExponentialNoError.Exp a, struct ExponentialNoError.Exp b) internal pure returns (enum CarefulMath.MathError, struct ExponentialNoError.Exp)

Subtracts two exponentials, returning a new exponential.

mulScalar

function mulScalar(struct ExponentialNoError.Exp a, uint256 scalar) internal pure returns (enum CarefulMath.MathError, struct ExponentialNoError.Exp)

Multiply an Exp by a scalar, returning a new Exp.

mulScalarTruncate

Multiply an Exp by a scalar, then truncate to return an unsigned integer.

mulScalarTruncateAddUInt

Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.

divScalar

Divide an Exp by a scalar, returning a new Exp.

divScalarByExp

Divide a scalar by an Exp, returning a new Exp.

divScalarByExpTruncate

Divide a scalar by an Exp, then truncate to return an unsigned integer.

mulExp

Multiplies two exponentials, returning a new exponential.

mulExp

Multiplies two exponentials given their mantissas, returning a new exponential.

mulExp3

Multiplies three exponentials, returning a new exponential.

divExp

Divides two exponentials, returning a new exponential. (a/scale) / (b/scale) = (a/scale) * (scale/b) = a/b, which we can scale as an Exp by calling getExp(a.mantissa, b.mantissa)