Documentation ¶
Overview ¶
This file creates type and function aliases the sdkmath.LegacyDec This is done for reducing verbosity and improving readability.
For consistency, we also alias Int and Uint so that sdkmath does not have to be directly imported in files where both decimal and integer types are used.
Index ¶
- Constants
- Variables
- func BigIntEq(t *testing.T, exp, got BigInt) (*testing.T, bool, string, string, string)
- func DecApproxEq(t *testing.T, d1 BigDec, d2 BigDec, tol BigDec) (*testing.T, bool, string, string, string)
- func DecEq(t *testing.T, exp, got BigDec) (*testing.T, bool, string, string, string)
- func DecsEqual(d1s, d2s []BigDec) bool
- func Equal[T Stringer](t *testing.T, tolerance ErrTolerance, A, B T)
- func OrderOfMagnitude(num Dec) int
- type BigDec
- func BigDecFromDec(d Dec) BigDec
- func BigDecFromDecCoinSlice(ds []sdk.DecCoin) []BigDec
- func BigDecFromDecMut(d Dec) BigDec
- func BigDecFromDecSlice(ds []Dec) []BigDec
- func BigDecFromSDKInt(i Int) BigDec
- func BinarySearchBigDec(f func(BigDec) BigDec, lowerbound BigDec, upperbound BigDec, ...) (BigDec, error)
- func DivCoinAmtsByU64ToBigDec(coins []sdk.Coin, scales []uint64, round RoundingDirection) ([]BigDec, error)
- func DivIntByU64ToBigDec(i Int, u uint64, round RoundingDirection) (BigDec, error)
- func Exp2(exponent BigDec) BigDec
- func MaxBigDec(d1, d2 BigDec) BigDec
- func MinBigDec(d1, d2 BigDec) BigDec
- func MonotonicSqrtBigDec(d BigDec) (BigDec, error)
- func MonotonicSqrtBigDecMut(d BigDec) (BigDec, error)
- func MustMonotonicSqrtBigDec(d BigDec) BigDec
- func MustNewBigDecFromStr(s string) BigDec
- func NewBigDec(i int64) BigDec
- func NewBigDecFromBigInt(i *big.Int) BigDec
- func NewBigDecFromBigIntMut(i *big.Int) BigDec
- func NewBigDecFromBigIntMutWithPrec(i *big.Int, prec int64) BigDec
- func NewBigDecFromBigIntWithPrec(i *big.Int, prec int64) BigDec
- func NewBigDecFromDecMulDec(a, b Dec) BigDec
- func NewBigDecFromInt(i BigInt) BigDec
- func NewBigDecFromIntWithPrec(i BigInt, prec int64) BigDec
- func NewBigDecFromStr(str string) (BigDec, error)
- func NewBigDecWithPrec(i, prec int64) BigDec
- func OneBigDec() BigDec
- func SmallestBigDec() BigDec
- func ZeroBigDec() BigDec
- func (d BigDec) Abs() BigDec
- func (d BigDec) AbsMut() BigDec
- func (d BigDec) Add(d2 BigDec) BigDec
- func (d BigDec) AddMut(d2 BigDec) BigDec
- func (d BigDec) ApproxRoot(root uint64) (guess BigDec, err error)
- func (d BigDec) ApproxSqrt() (BigDec, error)
- func (d BigDec) BigInt() *big.Int
- func (d BigDec) BigIntMut() *big.Int
- func (d BigDec) Ceil() BigDec
- func (d BigDec) CeilMut() BigDec
- func (d *BigDec) ChopPrecision(precision uint64) BigDec
- func (d *BigDec) ChopPrecisionMut(precision uint64) BigDec
- func (d BigDec) Clone() BigDec
- func (x BigDec) CustomBaseLog(base BigDec) BigDec
- func (d BigDec) Dec() Dec
- func (d BigDec) DecRoundUp() Dec
- func (d BigDec) DecWithPrecision(precision uint64) Dec
- func (d BigDec) Equal(d2 BigDec) bool
- func (d BigDec) Float64() (float64, error)
- func (d BigDec) Format(s fmt.State, verb rune)
- func (d BigDec) GT(d2 BigDec) bool
- func (d BigDec) GTE(d2 BigDec) bool
- func (d BigDec) IsInteger() bool
- func (d BigDec) IsNegative() bool
- func (d BigDec) IsNil() bool
- func (d BigDec) IsPositive() bool
- func (d BigDec) IsZero() bool
- func (d BigDec) LT(d2 BigDec) bool
- func (d BigDec) LTE(d2 BigDec) bool
- func (x BigDec) Ln() BigDec
- func (x BigDec) LogBase2() BigDec
- func (d BigDec) Marshal() ([]byte, error)
- func (d BigDec) MarshalAmino() ([]byte, error)
- func (d BigDec) MarshalJSON() ([]byte, error)
- func (d *BigDec) MarshalTo(data []byte) (n int, err error)
- func (d BigDec) MarshalYAML() (interface{}, error)
- func (d BigDec) Mul(d2 BigDec) BigDec
- func (d BigDec) MulDec(d2 Dec) BigDec
- func (d BigDec) MulDecMut(d2 Dec) BigDec
- func (d BigDec) MulInt(i BigInt) BigDec
- func (d BigDec) MulInt64(i int64) BigDec
- func (d BigDec) MulMut(d2 BigDec) BigDec
- func (d BigDec) MulRoundUp(d2 BigDec) BigDec
- func (d BigDec) MulRoundUpDec(d2 Dec) BigDec
- func (d BigDec) MulTruncate(d2 BigDec) BigDec
- func (d BigDec) MulTruncateDec(d2 Dec) BigDec
- func (d BigDec) MustFloat64() float64
- func (d BigDec) Neg() BigDec
- func (d BigDec) NegMut() BigDec
- func (d BigDec) Power(power BigDec) BigDec
- func (d BigDec) PowerInteger(power uint64) BigDec
- func (d BigDec) PowerIntegerMut(power uint64) BigDec
- func (d BigDec) Quo(d2 BigDec) BigDec
- func (d BigDec) QuoByDecRoundUp(d2 Dec) BigDec
- func (d BigDec) QuoInt(i BigInt) BigDec
- func (d BigDec) QuoInt64(i int64) BigDec
- func (d BigDec) QuoMut(d2 BigDec) BigDec
- func (d BigDec) QuoRaw(d2 int64) BigDec
- func (d BigDec) QuoRoundUp(d2 BigDec) BigDec
- func (d BigDec) QuoRoundUpMut(d2 BigDec) BigDec
- func (d BigDec) QuoRoundUpNextIntMut(d2 BigDec) BigDec
- func (d BigDec) QuoTruncate(d2 BigDec) BigDec
- func (d BigDec) QuoTruncateDec(d2 Dec) BigDec
- func (d BigDec) QuoTruncateDecMut(d2 Dec) BigDec
- func (d BigDec) QuoTruncateMut(d2 BigDec) BigDec
- func (d BigDec) RoundInt() BigInt
- func (d BigDec) RoundInt64() int64
- func (d *BigDec) Size() int
- func (d BigDec) String() string
- func (d BigDec) Sub(d2 BigDec) BigDec
- func (d BigDec) SubMut(d2 BigDec) BigDec
- func (x BigDec) TickLog() BigDec
- func (d BigDec) TruncateDec() BigDec
- func (d BigDec) TruncateInt() BigInt
- func (d BigDec) TruncateInt64() int64
- func (d *BigDec) Unmarshal(data []byte) error
- func (d *BigDec) UnmarshalAmino(bz []byte) error
- func (d *BigDec) UnmarshalJSON(bz []byte) error
- type BigInt
- func MaxBigInt(i, i2 BigInt) BigInt
- func MinBigInt(i1, i2 BigInt) BigInt
- func NewBigInt(n int64) BigInt
- func NewBigIntFromBigInt(i *big.Int) BigInt
- func NewBigIntFromString(s string) (res BigInt, ok bool)
- func NewBigIntFromUint64(n uint64) BigInt
- func NewBigIntWithDecimal(n int64, dec int) BigInt
- func OneBigInt() BigInt
- func ZeroBigInt() BigInt
- func (i BigInt) Abs() BigInt
- func (i BigInt) Add(i2 BigInt) (res BigInt)
- func (i BigInt) AddRaw(i2 int64) BigInt
- func (i BigInt) BigInt() *big.Int
- func (i BigInt) Equal(i2 BigInt) bool
- func (i BigInt) GT(i2 BigInt) bool
- func (i BigInt) GTE(i2 BigInt) bool
- func (i BigInt) Int64() int64
- func (i BigInt) IsInt64() bool
- func (i BigInt) IsNegative() bool
- func (i BigInt) IsNil() bool
- func (i BigInt) IsPositive() bool
- func (i BigInt) IsUint64() bool
- func (i BigInt) IsZero() bool
- func (i BigInt) LT(i2 BigInt) bool
- func (i BigInt) LTE(i2 BigInt) bool
- func (i BigInt) Marshal() ([]byte, error)
- func (i BigInt) MarshalAmino() ([]byte, error)
- func (i BigInt) MarshalJSON() ([]byte, error)
- func (i *BigInt) MarshalTo(data []byte) (n int, err error)
- func (i BigInt) MarshalYAML() (interface{}, error)
- func (i BigInt) Mod(i2 BigInt) BigInt
- func (i BigInt) ModRaw(i2 int64) BigInt
- func (i BigInt) Mul(i2 BigInt) (res BigInt)
- func (i BigInt) MulRaw(i2 int64) BigInt
- func (i BigInt) Neg() (res BigInt)
- func (i BigInt) Quo(i2 BigInt) (res BigInt)
- func (i BigInt) QuoRaw(i2 int64) BigInt
- func (i BigInt) Sign() int
- func (i *BigInt) Size() int
- func (i BigInt) String() string
- func (i BigInt) Sub(i2 BigInt) (res BigInt)
- func (i BigInt) SubRaw(i2 int64) BigInt
- func (i BigInt) ToDec() BigDec
- func (i BigInt) Uint64() uint64
- func (i *BigInt) Unmarshal(data []byte) error
- func (i *BigInt) UnmarshalAmino(bz []byte) error
- func (i *BigInt) UnmarshalJSON(bz []byte) error
- type Dec
- func AbsDifferenceWithSign(a, b Dec) (Dec, bool)
- func GetPowPrecision() Dec
- func MonotonicSqrt(d Dec) (Dec, error)
- func MonotonicSqrtMut(d Dec) (Dec, error)
- func MustMonotonicSqrt(d Dec) Dec
- func Pow(base Dec, exp Dec) Dec
- func PowApprox(originalBase Dec, exp Dec, precision Dec) Dec
- func SigFigRound(d Dec, tenToSigFig Int) Dec
- type ErrTolerance
- type Int
- type RoundingDirection
- type SdkDec
- type Stringer
- type Uint
Constants ¶
const ( // number of decimal places BigDecPrecision = 36 // bytes required to represent the above precision // Ceiling[Log2[10**Precision - 1]] BigDecimalPrecisionBits = 120 )
const ( DecPrecision = sdkmath.LegacyPrecision DecimalPrecisionBits = sdkmath.LegacyDecimalPrecisionBits )
Variables ¶
var ( ErrEmptyDecimalStr = errors.New("decimal string cannot be empty") ErrInvalidDecimalLength = errors.New("invalid decimal length") ErrInvalidDecimalStr = errors.New("invalid decimal string") )
Decimal errors
var ( // Dec NewDec = sdkmath.LegacyNewDec NewDecWithPrec = sdkmath.LegacyNewDecWithPrec NewDecFromBigInt = sdkmath.LegacyNewDecFromBigInt NewDecFromBigIntWithPrec = sdkmath.LegacyNewDecFromBigIntWithPrec NewDecFromInt = sdkmath.LegacyNewDecFromInt NewDecFromIntWithPrec = sdkmath.LegacyNewDecFromIntWithPrec NewDecFromStr = sdkmath.LegacyNewDecFromStr MustNewDecFromStr = sdkmath.LegacyMustNewDecFromStr ZeroDec = sdkmath.LegacyZeroDec OneDec = sdkmath.LegacyOneDec SmallestDec = sdkmath.LegacySmallestDec // Int NewInt = sdkmath.NewInt NewIntFromUint64 = sdkmath.NewIntFromUint64 NewIntFromBigInt = sdkmath.NewIntFromBigInt NewIntFromString = sdkmath.NewIntFromString NewIntWithDecimal = sdkmath.NewIntWithDecimal ZeroInt = sdkmath.ZeroInt OneInt = sdkmath.OneInt IntEq = sdkmath.IntEq MinInt = sdkmath.MinInt MaxInt = sdkmath.MaxInt // Uint NewUint = sdkmath.NewUint NewUintFromString = sdkmath.NewUintFromString MinDec = sdkmath.LegacyMinDec MaxDec = sdkmath.LegacyMaxDec )
Functions ¶
func DecApproxEq ¶
func DecApproxEq(t *testing.T, d1 BigDec, d2 BigDec, tol BigDec) (*testing.T, bool, string, string, string)
DecApproxEq returns true if the differences between two given decimals are smaller than the tolerance range. Intended to be used with require/assert: require.True(t, DecEq(...))
nolint
func DecEq ¶
DecEq returns true if two given decimals are equal. Intended to be used with require/assert: require.True(t, DecEq(...))
nolint
func OrderOfMagnitude ¶
OrderOfMagnitude calculates the order of magnitude without using logarithms. CONTRACT: num must be positive or zero. Panics if not
Types ¶
type BigDec ¶
type BigDec struct {
// contains filtered or unexported fields
}
NOTE: never use new(BigDec) or else we will panic unmarshalling into the nil embedded big.Int
func BigDecFromDec ¶
BigDecFromDec returns the BigDec representation of an Dec. Values in any additional decimal places are truncated.
func BigDecFromDecCoinSlice ¶
BigDecFromDecSlice returns the []BigDec representation of an []Dec. Values in any additional decimal places are truncated.
func BigDecFromDecMut ¶
BigDecFromDec returns the BigDec representation of an Dec. Values in any additional decimal places are truncated.
func BigDecFromDecSlice ¶
BigDecFromDecSlice returns the []BigDec representation of an []Dec. Values in any additional decimal places are truncated.
func BigDecFromSDKInt ¶
BigDecFromSDKInt returns the BigDec representation of an sdkInt. Values in any additional decimal places are truncated.
func BinarySearchBigDec ¶
func BinarySearchBigDec(f func(BigDec) BigDec, lowerbound BigDec, upperbound BigDec, targetOutput BigDec, errTolerance ErrTolerance, maxIterations int, ) (BigDec, error)
BinarySearchBigDec takes as input: * an input range [lowerbound, upperbound] * an increasing function f * a target output x * max number of iterations (for gas control / handling does-not-converge cases)
It binary searches on the input range, until it finds an input y s.t. f(y) meets the err tolerance constraints for how close it is to x. If we perform more than maxIterations (or equivalently lowerbound = upperbound), we return an error.
func DivIntByU64ToBigDec ¶
func DivIntByU64ToBigDec(i Int, u uint64, round RoundingDirection) (BigDec, error)
func Exp2 ¶
Exp2 takes 2 to the power of a given non-negative decimal exponent and returns the result. The computation is performed by using th following property: 2^decimal_exp = 2^{integer_exp + fractional_exp} = 2^integer_exp * 2^fractional_exp The max supported exponent is defined by the global maxSupportedExponent. If a greater exponent is given, the function panics. Panics if the exponent is negative. The answer is correct up to a factor of 10^-18. Meaning, result = result * k for k in [1 - 10^(-18), 1 + 10^(-18)] Note: our Python script plots show accuracy up to a factor of 10^22. However, in Go tests we only test up to 10^18. Therefore, this is the guarantee.
func MonotonicSqrtBigDec ¶
func MonotonicSqrtBigDecMut ¶
func MustMonotonicSqrtBigDec ¶
MustMonotonicSqrt returns the output of MonotonicSqrt, panicking on error.
func MustNewBigDecFromStr ¶
Decimal from string, panic on error
func NewBigDecFromBigInt ¶
create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= BigDecPrecision
func NewBigDecFromBigIntMut ¶
func NewBigDecFromBigIntMutWithPrec ¶
returns a BigDec, built using a mutated copy of the passed in bigint. CONTRACT: prec <= BigDecPrecision
func NewBigDecFromBigIntWithPrec ¶
create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= BigDecPrecision
func NewBigDecFromDecMulDec ¶
func NewBigDecFromInt ¶
create a new BigDec from big integer assuming whole numbers CONTRACT: prec <= BigDecPrecision
func NewBigDecFromIntWithPrec ¶
create a new BigDec from big integer with decimal place at prec CONTRACT: prec <= BigDecPrecision
func NewBigDecFromStr ¶
create a decimal from an input decimal string. valid must come in the form:
(-) whole integers (.) decimal integers
examples of acceptable input include:
-123.456 456.7890 345 -456789
NOTE - An error will return if more decimal places are provided in the string than the constant Precision.
CONTRACT - This function does not mutate the input str.
func NewBigDecWithPrec ¶
create a new BigDec from integer with decimal place at prec CONTRACT: prec <= BigDecPrecision
func SmallestBigDec ¶
func SmallestBigDec() BigDec
func ZeroBigDec ¶
func ZeroBigDec() BigDec
func (BigDec) ApproxRoot ¶
ApproxRoot returns an approximate estimation of a Dec's positive real nth root using Newton's method (where n is positive). The algorithm starts with some guess and computes the sequence of improved guesses until an answer converges to an approximate answer. It returns `|d|.ApproxRoot() * -1` if input is negative. A maximum number of 100 iterations is used a backup boundary condition for cases where the answer never converges enough to satisfy the main condition.
func (BigDec) ApproxSqrt ¶
ApproxSqrt is a wrapper around ApproxRoot for the common special case of finding the square root of a number. It returns -(sqrt(abs(d)) if input is negative. TODO: Optimize this to be faster just using native big int sqrt.
func (BigDec) Ceil ¶
Ceil returns the smallest integer value (as a decimal) that is greater than or equal to the given decimal.
func (*BigDec) ChopPrecision ¶
ChopPrecision truncates all decimals after precision numbers after decimal point CONTRACT: precision <= BigDecPrecision Panics if precision exceeds BigDecPrecision
func (*BigDec) ChopPrecisionMut ¶
ChopPrecisionMut truncates all decimals after precision numbers after decimal point. Mutative CONTRACT: precision <= BigDecPrecision Panics if precision exceeds BigDecPrecision
func (BigDec) CustomBaseLog ¶
log_a(x) custom base logarithm Formula: log_a(b) = log_2(b) / log_2(a)
func (BigDec) Dec ¶
Dec returns the osmomath.Dec representation of a BigDec. Values in any additional decimal places are truncated.
func (BigDec) DecRoundUp ¶
DecRoundUp returns the osmomath.Dec representation of a BigDec. Round up at precision end. Values in any additional decimal places are truncated.
func (BigDec) DecWithPrecision ¶
DecWithPrecision converts BigDec to Dec with desired precision Example: BigDec: 1.010100000000153000000000000000000000 precision: 4 Output Dec: 1.010100000000000000 Panics if precision exceeds DecPrecision
func (BigDec) Float64 ¶
Float64 returns the float64 representation of a BigDec. Will return the error if the conversion failed.
func (BigDec) IsNegative ¶
func (BigDec) IsPositive ¶
func (BigDec) LogBase2 ¶
LogBase2 returns log_2 {x}. Rounds down by truncations during division and right shifting. Accurate up to 32 precision digits. Implementation is based on: https://stm32duinoforum.com/forum/dsp/BinaryLogarithm.pdf
func (BigDec) MarshalAmino ¶
Override Amino binary serialization by proxying to protobuf.
func (BigDec) MarshalJSON ¶
MarshalJSON marshals the decimal
func (BigDec) MarshalYAML ¶
MarshalYAML returns the YAML representation.
func (BigDec) Mul ¶
Mut performs non-mutative multiplication. The receiver is not modifier but the result is.
func (BigDec) MulMut ¶
Mut performs non-mutative multiplication. The receiver is not modifier but the result is.
func (BigDec) MulRoundUpDec ¶
multiplication round up by Dec
func (BigDec) MulTruncateDec ¶
func (BigDec) MustFloat64 ¶
MustFloat64 returns the float64 representation of a BigDec. Would panic if the conversion failed.
func (BigDec) Power ¶
Power returns a result of raising the given big dec to a positive decimal power. Panics if the power is negative. Panics if the base is negative. Does not mutate the receiver. The max supported exponent is defined by the global maxSupportedExponent. If a greater exponent is given, the function panics. The error is not bounded but expected to be around 10^-18, use with care. See the underlying Exp2, LogBase2 and Mul for the details of their bounds. WARNING: This function is broken for base < 1. The reason is that logarithm function is negative between zero and 1, and the Exp2(k) is undefined for negative k. As a result, this function panics if called for d < 1.
func (BigDec) PowerInteger ¶
PowerInteger takes a given decimal to an integer power and returns the result. Non-mutative. Uses square and multiply algorithm for performing the calculation.
func (BigDec) PowerIntegerMut ¶
PowerIntegerMut takes a given decimal to an integer power and returns the result. Mutative. Uses square and multiply algorithm for performing the calculation.
func (BigDec) QuoRoundUpMut ¶
quotient, round up (mutative)
func (BigDec) QuoRoundUpNextIntMut ¶
quotient, round up to next integer (mutative)
func (BigDec) QuoTruncateDecMut ¶
quotient truncate (mutative)
func (BigDec) QuoTruncateMut ¶
quotient truncate (mutative)
func (BigDec) RoundInt64 ¶
RoundInt64 rounds the decimal using bankers rounding
func (BigDec) TickLog ¶
log_1.0001(x) "tick" base logarithm Formula: log_1.0001(b) = log_2(b) / log_2(1.0001)
func (BigDec) TruncateDec ¶
TruncateDec truncates the decimals from the number and returns a Dec
func (BigDec) TruncateInt ¶
TruncateInt truncates the decimals from the number and returns an Int
func (BigDec) TruncateInt64 ¶
TruncateInt64 truncates the decimals from the number and returns an int64
func (*BigDec) UnmarshalAmino ¶
func (*BigDec) UnmarshalJSON ¶
UnmarshalJSON defines custom decoding scheme
type BigInt ¶
type BigInt struct {
// contains filtered or unexported fields
}
Int wraps big.Int with a 257 bit range bound Checks overflow, underflow and division by zero Exists in range from -(2^256 - 1) to 2^256 - 1
func NewBigIntFromBigInt ¶
NewBigIntFromBigInt constructs Int from big.Int. If the provided big.Int is nil, it returns an empty instance. This function panics if the bit length is > 256.
func NewBigIntFromString ¶
NewBigIntFromString constructs Int from string
func NewBigIntFromUint64 ¶
NewBigIntFromUint64 constructs an Int from a uint64.
func NewBigIntWithDecimal ¶
NewBigIntWithDecimal constructs Int with decimal Result value is n*10^dec
func (BigInt) IsNegative ¶
IsNegative returns true if Int is negative
func (BigInt) IsPositive ¶
IsPositive returns true if Int is positive
func (BigInt) MarshalAmino ¶
Override Amino binary serialization by proxying to protobuf.
func (BigInt) MarshalJSON ¶
MarshalJSON defines custom encoding scheme
func (BigInt) MarshalYAML ¶
MarshalYAML returns the YAML representation.
func (*BigInt) UnmarshalAmino ¶
func (*BigInt) UnmarshalJSON ¶
UnmarshalJSON defines custom decoding scheme
type Dec ¶
func AbsDifferenceWithSign ¶
AbsDifferenceWithSign returns | a - b |, (a - b).sign() a is mutated and returned.
func GetPowPrecision ¶
func GetPowPrecision() Dec
Returns the internal "power precision". All fractional exponentiation in osmosis is expected to be accurate up to powPrecision. *technically* the error term can be greater than this powPrecision, but for small bases this bound applies. See comments in the PowApprox function for more detail.
func MonotonicSqrt ¶
Returns square root of d returns an error if one of the following conditions is met: - d is negative - d is too small to have a representable square root. This function guarantees: the returned root r, will be such that r^2 >= d This function is monotonic, i.e. if d1 >= d2, then sqrt(d1) >= sqrt(d2)
func MonotonicSqrtMut ¶
func MustMonotonicSqrt ¶
MustMonotonicSqrt returns the output of MonotonicSqrt, panicking on error.
func Pow ¶
Pow computes base^(exp) However since the exponent is not an integer, we must do an approximation algorithm. TODO: In the future, lets add some optimized routines for common exponents, e.g. for common wIn / wOut ratios Many simple exponents like 2:1 pools.
func SigFigRound ¶
SigFigRound rounds to a specified significant figure.
type ErrTolerance ¶
type ErrTolerance struct { AdditiveTolerance Dec MultiplicativeTolerance Dec RoundingDir RoundingDirection }
ErrTolerance is used to define a compare function, which checks if two ints are within a certain error tolerance of one another, and (optionally) that they are rounding in the correct direction. ErrTolerance.Compare(a, b) returns true iff: * RoundingMode = RoundUp, then a <= b * RoundingMode = RoundDown, then a >= b * |a - b| <= AdditiveTolerance * |a - b| / min(a, b) <= MultiplicativeTolerance
Each check is respectively ignored if the entry is nil. So AdditiveTolerance = Int{} or ZeroInt() MultiplicativeTolerance = Dec{} RoundingDir = RoundUnconstrained. Note that if AdditiveTolerance == 0, then this is equivalent to a standard compare.
func (ErrTolerance) Compare ¶
func (e ErrTolerance) Compare(expected Int, actual Int) int
Compare returns if actual is within errTolerance of expected. returns 0 if it is returns 1 if not, and expected > actual. returns -1 if not, and expected < actual
func (ErrTolerance) CompareBigDec ¶
func (e ErrTolerance) CompareBigDec(expected BigDec, actual BigDec) int
CompareBigDec validates if actual is within errTolerance of expected. returns 0 if it is returns 1 if not, and expected > actual. returns -1 if not, and expected < actual
func (ErrTolerance) CompareDec ¶
func (e ErrTolerance) CompareDec(expected Dec, actual Dec) int
CompareDec validates if actual is within errTolerance of expected. returns 0 if it is returns 1 if not, and expected > actual. returns -1 if not, and expected < actual
func (ErrTolerance) EqualCoins ¶
EqualCoins returns true iff the two coins are equal within the ErrTolerance constraints and false otherwise. TODO: move error tolerance functions to a separate file.
type Int ¶
func BinarySearch ¶
func BinarySearch(f func(Int) (Int, error), lowerbound Int, upperbound Int, targetOutput Int, errTolerance ErrTolerance, maxIterations int, ) (Int, error)
Binary search inputs between [lowerbound, upperbound] to a monotonic increasing function f. We stop once f(found_input) meets the ErrTolerance constraints. If we perform more than maxIterations (or equivalently lowerbound = upperbound), we return an error.
type RoundingDirection ¶
type RoundingDirection int
const ( RoundUnconstrained RoundingDirection = 0 RoundUp RoundingDirection = 1 RoundDown RoundingDirection = 2 RoundBankers RoundingDirection = 3 )