trait TruncatedDivision[A] extends Signed[A]
Division and modulus for computer scientists taken from https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
For two numbers x (dividend) and y (divisor) on an ordered ring with y != 0, there exists a pair of numbers q (quotient) and r (remainder) such that these laws are satisfied:
(1) q is an integer (2) x = y * q + r (division rule) (3) |r| < |y|, (4t) r = 0 or sign(r) = sign(x), (4f) r = 0 or sign(r) = sign(y).
where sign is the sign function, and the absolute value function |x| is defined as |x| = x if x >=0, and |x| = -x otherwise.
We define functions tmod and tquot such that: q = tquot(x, y) and r = tmod(x, y) obey rule (4t), (which truncates effectively towards zero) and functions fmod and fquot such that: q = fquot(x, y) and r = fmod(x, y) obey rule (4f) (which floors the quotient and effectively rounds towards negative infinity).
Law (4t) corresponds to ISO C99 and Haskell's quot/rem. Law (4f) is described by Knuth and used by Haskell, and fmod corresponds to the REM function of the IEEE floating-point standard.
- Source
- TruncatedDivision.scala
- Alphabetic
- By Inheritance
- TruncatedDivision
- Signed
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def abs(a: A): A
An idempotent function that ensures an object has a non-negative sign.
An idempotent function that ensures an object has a non-negative sign.
- Definition Classes
- Signed
- abstract def additiveCommutativeMonoid: AdditiveCommutativeMonoid[A]
- Definition Classes
- Signed
- abstract def fmod(x: A, y: A): A
- abstract def fquot(x: A, y: A): A
- abstract def getClass(): Class[_ <: AnyRef]
- Definition Classes
- Any
- abstract def order: Order[A]
- Definition Classes
- Signed
- abstract def signum(a: A): Int
Returns 0 if
a
is 0, 1 ifa
is positive, and -1 isa
is negative.Returns 0 if
a
is 0, 1 ifa
is positive, and -1 isa
is negative.- Definition Classes
- Signed
- abstract def tmod(x: A, y: A): A
- abstract def tquot(x: A, y: A): A
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- Any
- final def ##: Int
- Definition Classes
- Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def equals(arg0: Any): Boolean
- Definition Classes
- Any
- def fquotmod(x: A, y: A): (A, A)
- def hashCode(): Int
- Definition Classes
- Any
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isSignNegative(a: A): Boolean
- Definition Classes
- Signed
- def isSignNonNegative(a: A): Boolean
- Definition Classes
- Signed
- def isSignNonPositive(a: A): Boolean
- Definition Classes
- Signed
- def isSignNonZero(a: A): Boolean
- Definition Classes
- Signed
- def isSignPositive(a: A): Boolean
- Definition Classes
- Signed
- def isSignZero(a: A): Boolean
- Definition Classes
- Signed
- def sign(a: A): Sign
Returns Zero if
a
is 0, Positive ifa
is positive, and Negative isa
is negative.Returns Zero if
a
is 0, Positive ifa
is positive, and Negative isa
is negative.- Definition Classes
- Signed
- def toString(): String
- Definition Classes
- Any
- def tquotmod(x: A, y: A): (A, A)