Num.Ratio
Num / Ratio
Import
import { Num } from '@wollybeard/kit'
// Access via namespace
Num.Ratio.someFunction()
import * as Num from '@wollybeard/kit/num'
// Access via namespace
Num.Ratio.someFunction()
Functions
[F]
is
(value: unknown): boolean
Parameters:
value
- The value to check
Returns: True if value is a Ratio
Type predicate to check if value is a Ratio.
[F]
from
(numerator: Int, denominator: NonZero): Ratio
Parameters:
numerator
- The top numberdenominator
- The bottom number (non-zero)
Returns: The simplified ratio
Construct a Ratio from numerator and denominator. Automatically simplifies to lowest terms and normalizes sign.
[F]
fromDecimal
(value: number, maxDenominator?: number = 10000): Ratio
Parameters:
value
- The decimal numbermaxDenominator
- Maximum denominator to use (default: 10000)
Returns: The ratio approximation
Convert a decimal number to a Ratio with specified precision. Useful for converting floats to exact ratios.
[F]
simplify
(ratio: Ratio): Ratio
Parameters:
ratio
- The ratio to simplify
Returns: The simplified ratio
Simplify a ratio to lowest terms. Note: from() already does this, but this is useful for ratios from other sources.
[F]
toDecimal
(ratio: Ratio): number
Parameters:
ratio
- The ratio to convert
Returns: The decimal representation
Convert ratio to decimal number. Note: This may lose precision for ratios like 1/3.
[F]
add
(a: Ratio, b: Ratio): Ratio
Parameters:
a
- First ratiob
- Second ratio
Returns: The sum as a simplified ratio
Add two ratios. Result is automatically simplified.
[F]
subtract
(a: Ratio, b: Ratio): Ratio
Parameters:
a
- First ratiob
- Second ratio
Returns: The difference as a simplified ratio
Subtract two ratios. Result is automatically simplified.
[F]
multiply
(a: Ratio, b: Ratio): Ratio
Parameters:
a
- First ratiob
- Second ratio
Returns: The product as a simplified ratio
Multiply two ratios. Result is automatically simplified.
[F]
divide
(a: Ratio, b: Ratio): Ratio
Parameters:
a
- First ratio (dividend)b
- Second ratio (divisor, must be non-zero)
Returns: The quotient as a simplified ratio
Throws:
- Error if b is zero
Divide two ratios. Result is automatically simplified.
[F]
compare
(a: Ratio, b: Ratio): 0 | 1 | -1
Parameters:
a
- First ratiob
- Second ratio
Returns: -1, 0, or 1
Compare two ratios. Returns -1 if a
b, 0 if a = b, 1 if a
b.
[F]
reciprocal
(ratio: Ratio): Ratio
Parameters:
ratio
- The ratio to invert
Returns: The reciprocal
Throws:
- Error if ratio is zero
Get the reciprocal (inverse) of a ratio.
[F]
toMixedNumber
(ratio: Ratio): { whole: Int; fraction: Ratio; }
Parameters:
ratio
- The ratio to convert
Returns: Object with whole and fractional parts
Convert ratio to mixed number representation. Returns whole part and fractional part.
Constants
[C]
fromWith
;((denominator: NonZero) => (numerator: Int) => Ratio)
Create a function that constructs ratios with a fixed numerator. Useful for creating unit fractions.
[C]
fromOn
;((numerator: Int) => (denominator: NonZero) => Ratio)
Create a function that constructs ratios with a fixed denominator. Useful for working with common denominators.
[C]
addOn
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that adds a specific ratio. Useful for repeated additions.
[C]
addWith
;((b: Ratio) => (a: Ratio) => Ratio)
Create a function that adds to a specific ratio. Useful for accumulating values.
[C]
subtractWith
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that subtracts from a specific ratio. Useful for calculating remainders.
[C]
subtractOn
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that subtracts a specific ratio. Useful for repeated subtractions.
[C]
multiplyOn
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that multiplies by a specific ratio. Useful for scaling.
[C]
multiplyWith
;((b: Ratio) => (a: Ratio) => Ratio)
Create a function that multiplies a specific ratio. Useful for applying ratios to values.
[C]
divideWith
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that divides from a specific ratio. Useful for finding proportions.
[C]
divideOn
;((a: Ratio) => (b: Ratio) => Ratio)
Create a function that divides by a specific ratio. Useful for repeated divisions.
[C]
compareOn
;((a: Ratio) => (b: Ratio) => 0 | 1 | -1)
Create a function that compares against a specific ratio. Useful for filtering or sorting.
[C]
compareWith
;((b: Ratio) => (a: Ratio) => 0 | 1 | -1)
Create a function that compares a specific ratio. Useful for finding where a ratio fits in a range.
Types
[∩]
Ratio
type Ratio = {
readonly numerator: Int
readonly denominator: NonZero
} & { [RatioBrand]: true }
Ratio (rational number)
- a number expressible as p/q where q ≠ 0.
Ratios provide exact arithmetic without floating-point errors, making them ideal for:
- Financial calculations (no lost pennies)
- Music theory (frequency ratios like 3:2 for perfect fifth)
- Aspect ratios and proportions
- Probability calculations
- Any domain requiring exact fractional values