[backport] run nimpretty on numbers stuff
This commit is contained in:
parent
aa513d78e7
commit
6c994b2498
6 changed files with 183 additions and 167 deletions
|
|
@ -39,7 +39,8 @@ proc toRational*[T: SomeInteger](x: T): Rational[T] =
|
|||
result.num = x
|
||||
result.den = 1
|
||||
|
||||
proc toRational*(x: float, n: int = high(int) shr (sizeof(int) div 2 * 8)): Rational[int] =
|
||||
proc toRational*(x: float,
|
||||
n: int = high(int) shr (sizeof(int) div 2 * 8)): Rational[int] =
|
||||
## Calculates the best rational numerator and denominator
|
||||
## that approximates to `x`, where the denominator is
|
||||
## smaller than `n` (default is the largest possible
|
||||
|
|
@ -67,9 +68,9 @@ proc toRational*(x: float, n: int = high(int) shr (sizeof(int) div 2 * 8)): Rati
|
|||
swap m22, m21
|
||||
m11 = m12 * ai + m11
|
||||
m21 = m22 * ai + m21
|
||||
if x == float(ai): break # division by zero
|
||||
if x == float(ai): break # division by zero
|
||||
x = 1/(x - float(ai))
|
||||
if x > float(high(int32)): break # representation failure
|
||||
if x > float(high(int32)): break # representation failure
|
||||
ai = int(x)
|
||||
result = m11 // m21
|
||||
|
||||
|
|
@ -282,69 +283,69 @@ proc hash*[T](x: Rational[T]): Hash =
|
|||
when isMainModule:
|
||||
var
|
||||
z = Rational[int](num: 0, den: 1)
|
||||
o = initRational(num=1, den=1)
|
||||
o = initRational(num = 1, den = 1)
|
||||
a = initRational(1, 2)
|
||||
b = -1 // -2
|
||||
m1 = -1 // 1
|
||||
tt = 10 // 2
|
||||
|
||||
assert( a == a )
|
||||
assert( (a-a) == z )
|
||||
assert( (a+b) == o )
|
||||
assert( (a/b) == o )
|
||||
assert( (a*b) == 1 // 4 )
|
||||
assert( (3/a) == 6 // 1 )
|
||||
assert( (a/3) == 1 // 6 )
|
||||
assert( a*b == 1 // 4 )
|
||||
assert( tt*z == z )
|
||||
assert( 10*a == tt )
|
||||
assert( a*10 == tt )
|
||||
assert( tt/10 == a )
|
||||
assert( a-m1 == 3 // 2 )
|
||||
assert( a+m1 == -1 // 2 )
|
||||
assert( m1+tt == 16 // 4 )
|
||||
assert( m1-tt == 6 // -1 )
|
||||
assert(a == a)
|
||||
assert( (a-a) == z)
|
||||
assert( (a+b) == o)
|
||||
assert( (a/b) == o)
|
||||
assert( (a*b) == 1 // 4)
|
||||
assert( (3/a) == 6 // 1)
|
||||
assert( (a/3) == 1 // 6)
|
||||
assert(a*b == 1 // 4)
|
||||
assert(tt*z == z)
|
||||
assert(10*a == tt)
|
||||
assert(a*10 == tt)
|
||||
assert(tt/10 == a)
|
||||
assert(a-m1 == 3 // 2)
|
||||
assert(a+m1 == -1 // 2)
|
||||
assert(m1+tt == 16 // 4)
|
||||
assert(m1-tt == 6 // -1)
|
||||
|
||||
assert( z < o )
|
||||
assert( z <= o )
|
||||
assert( z == z )
|
||||
assert( cmp(z, o) < 0 )
|
||||
assert( cmp(o, z) > 0 )
|
||||
assert(z < o)
|
||||
assert(z <= o)
|
||||
assert(z == z)
|
||||
assert(cmp(z, o) < 0)
|
||||
assert(cmp(o, z) > 0)
|
||||
|
||||
assert( o == o )
|
||||
assert( o >= o )
|
||||
assert( not(o > o) )
|
||||
assert( cmp(o, o) == 0 )
|
||||
assert( cmp(z, z) == 0 )
|
||||
assert( hash(o) == hash(o) )
|
||||
assert(o == o)
|
||||
assert(o >= o)
|
||||
assert(not(o > o))
|
||||
assert(cmp(o, o) == 0)
|
||||
assert(cmp(z, z) == 0)
|
||||
assert(hash(o) == hash(o))
|
||||
|
||||
assert( a == b )
|
||||
assert( a >= b )
|
||||
assert( not(b > a) )
|
||||
assert( cmp(a, b) == 0 )
|
||||
assert( hash(a) == hash(b) )
|
||||
assert(a == b)
|
||||
assert(a >= b)
|
||||
assert(not(b > a))
|
||||
assert(cmp(a, b) == 0)
|
||||
assert(hash(a) == hash(b))
|
||||
|
||||
var x = 1//3
|
||||
|
||||
x *= 5//1
|
||||
assert( x == 5//3 )
|
||||
assert(x == 5//3)
|
||||
x += 2 // 9
|
||||
assert( x == 17//9 )
|
||||
assert(x == 17//9)
|
||||
x -= 9//18
|
||||
assert( x == 25//18 )
|
||||
assert(x == 25//18)
|
||||
x /= 1//2
|
||||
assert( x == 50//18 )
|
||||
assert(x == 50//18)
|
||||
|
||||
var y = 1//3
|
||||
|
||||
y *= 4
|
||||
assert( y == 4//3 )
|
||||
assert(y == 4//3)
|
||||
y += 5
|
||||
assert( y == 19//3 )
|
||||
assert(y == 19//3)
|
||||
y -= 2
|
||||
assert( y == 13//3 )
|
||||
assert(y == 13//3)
|
||||
y /= 9
|
||||
assert( y == 13//27 )
|
||||
assert(y == 13//27)
|
||||
|
||||
assert toRational(5) == 5//1
|
||||
assert abs(toFloat(y) - 0.4814814814814815) < 1.0e-7
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue