TruncatedDivision

algebra.ring.TruncatedDivision
See theTruncatedDivision companion object
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.

Attributes

Companion
object
Source
TruncatedDivision.scala
Graph
Supertypes
trait Signed[A]
class Any
Known subtypes

Members list

Value members

Abstract methods

def fmod(x: A, y: A): A

Attributes

Source
TruncatedDivision.scala
def fquot(x: A, y: A): A

Attributes

Source
TruncatedDivision.scala
def tmod(x: A, y: A): A

Attributes

Source
TruncatedDivision.scala
def tquot(x: A, y: A): A

Attributes

Source
TruncatedDivision.scala

Concrete methods

def fquotmod(x: A, y: A): (A, A)

Attributes

Source
TruncatedDivision.scala
def tquotmod(x: A, y: A): (A, A)

Attributes

Source
TruncatedDivision.scala

Inherited methods

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.

Attributes

Inherited from:
Signed
Source
Signed.scala

Attributes

Inherited from:
Signed
Source
Signed.scala
def isSignNegative(a: A): Boolean

Attributes

Inherited from:
Signed
Source
Signed.scala

Attributes

Inherited from:
Signed
Source
Signed.scala

Attributes

Inherited from:
Signed
Source
Signed.scala
def isSignNonZero(a: A): Boolean

Attributes

Inherited from:
Signed
Source
Signed.scala
def isSignPositive(a: A): Boolean

Attributes

Inherited from:
Signed
Source
Signed.scala
def isSignZero(a: A): Boolean

Attributes

Inherited from:
Signed
Source
Signed.scala
def order: Order[A]

Attributes

Inherited from:
Signed
Source
Signed.scala
def sign(a: A): Sign

Returns Zero if a is 0, Positive if a is positive, and Negative is a is negative.

Returns Zero if a is 0, Positive if a is positive, and Negative is a is negative.

Attributes

Inherited from:
Signed
Source
Signed.scala
def signum(a: A): Int

Returns 0 if a is 0, 1 if a is positive, and -1 is a is negative.

Returns 0 if a is 0, 1 if a is positive, and -1 is a is negative.

Attributes

Inherited from:
Signed
Source
Signed.scala