rational.bend checks
raw source on the hub · import 0xbf5d8bf07d7411858acb5142889fc4d7/rational.bend as Rational
Exact rational numbers over BigInt, always in lowest terms.
3 imports
import Base import ./bigint.bend as Big import ./decimal.bend as Dec
Types
type Rational source · line 9 · raw
Data
num / den with den > 0 and gcd(num, den) = 1, so zero is 0/1 and equal values are equal terms. Build one with make, from_bigint or from_decimal; the raw constructor does not normalize.
Rational@num:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> @den:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> Rational
Definitions
def Rational.low source · line 12 · raw
@p:Pair(0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt, 0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt) -> Rational
def Rational.norm source · line 17 · raw
@n:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> @d:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> Rational
n / d for a nonzero d.
def Rational.from_bigint source · line 20 · raw
@n:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> Rational
def Rational.make.if source · line 23 · raw
@z:Bool -> @n:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> @d:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> Maybe<&2, Rational>
def Rational.make source · line 32 · raw
@n:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> @+d:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> Maybe<&2, Rational>
n / d in lowest terms, or None when d is zero.
def Rational.from_decimal source · line 35 · raw
@d:0xbf5d8bf07d7411858acb5142889fc4d7/decimal.Decimal -> Rational
def Rational.to_decimal source · line 41 · raw
@r:Rational -> Maybe<&2, 0xbf5d8bf07d7411858acb5142889fc4d7/decimal.Decimal>
The exact decimal, or None when it repeats (den has a factor besides 2, 5).
def Rational.neg source · line 46 · raw
@r:Rational -> Rational
def Rational.is_zero source · line 51 · raw
@r:Rational -> Bool
def Rational.add source · line 56 · raw
@a:Rational -> @b:Rational -> Rational
def Rational.sub source · line 62 · raw
@a:Rational -> @b:Rational -> Rational
def Rational.mul source · line 65 · raw
@a:Rational -> @b:Rational -> Rational
def Rational.div source · line 71 · raw
@a:Rational -> @b:Rational -> Maybe<&2, Rational>
a / b, or None when b is zero.
def Rational.cmp source · line 77 · raw
@a:Rational -> @b:Rational -> Cmp
Denominators are positive, so cross-multiplying keeps the order.
def Rational.show.if source · line 82 · raw
@whole:Bool -> @n:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> @d:0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt -> String
def Rational.show source · line 90 · raw
@r:Rational -> String
"n/d", or "n" when the denominator is 1.
def Rational.read.frac source · line 95 · raw
@a:Maybe<&2, 0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt> -> @b:Maybe<&2, 0xbf5d8bf07d7411858acb5142889fc4d7/bigint.BigInt> -> Maybe<&2, Rational>
def Rational.read.dec source · line 103 · raw
@m:Maybe<&2, 0xbf5d8bf07d7411858acb5142889fc4d7/decimal.Decimal> -> Maybe<&2, Rational>
def Rational.read.parts source · line 110 · raw
@ps:List<&2, String> -> Maybe<&2, Rational>
def Rational.read source · line 121 · raw
@s:String -> Maybe<&2, Rational>
"n/d" with BigInt sides (normalized; a zero d is None), or any number Decimal.read takes, such as "-1.25" or "3e-2".