Table of Contents

Struct Fraction<TEva>

Namespace
Hi.Geom
Assembly
HiDisp.dll

Pure C# unlimited precision fraction.

public struct Fraction<TEva> : IComparable<Fraction<TEva>>, IEquatable<Fraction<TEva>> where TEva : struct, INumber<TEva>

Type Parameters

TEva

Evaluated floating point type (e.g. double, decimal).

Implements
Inherited Members
Extension Methods

Remarks

A fraction consists of a numerator and denominator using BigInteger.

The fraction may be not packed or not evaluated. However, all fraction numerator and denominator are singular managed and denominator is never negative.

Design mirrors geom::fraction_t<0, EvaType> in CppCore.

Constructors

Fraction()

Initializes a zero fraction (0/0, status=None).

public Fraction()

Fraction(long)

Initializes a fraction with integer value.

public Fraction(long num)

Parameters

num long

The integer value.

Fraction(long, long)

Initializes a fraction with numerator and denominator.

public Fraction(long num, long den)

Parameters

num long

The numerator.

den long

The denominator.

Fraction(BigInteger)

Initializes a fraction with integer value.

public Fraction(BigInteger num)

Parameters

num BigInteger

The integer value.

Fraction(BigInteger, BigInteger)

Initializes a fraction with numerator and denominator.

public Fraction(BigInteger num, BigInteger den)

Parameters

num BigInteger

The numerator.

den BigInteger

The denominator.

Properties

CeilInt

Gets the ceiling integer value.

public readonly int CeilInt { get; }

Property Value

int

Denominator

Gets or sets the denominator.

public BigInteger Denominator { readonly get; set; }

Property Value

BigInteger

FloorInt

Gets the floor integer value.

public readonly int FloorInt { get; }

Property Value

int

IsEvaluated

Gets whether the fraction value has been evaluated.

public readonly bool IsEvaluated { get; }

Property Value

bool

IsFinite

Gets whether the fraction is finite (denominator != 0).

public readonly bool IsFinite { get; }

Property Value

bool

IsNaN

Gets whether the fraction is NaN (0/0).

public readonly bool IsNaN { get; }

Property Value

bool

IsPacked

Gets whether the fraction is packed (reduced to irreducible form).

public readonly bool IsPacked { get; }

Property Value

bool

IsZero

Gets whether the fraction is zero (numerator == 0 and denominator != 0).

public readonly bool IsZero { get; }

Property Value

bool

NaN

NaN fraction (0/0).

public static Fraction<TEva> NaN { get; }

Property Value

Fraction<TEva>

NegativeInf

Negative infinity fraction (-1/0).

public static Fraction<TEva> NegativeInf { get; }

Property Value

Fraction<TEva>

Numerator

Gets or sets the numerator.

public BigInteger Numerator { readonly get; set; }

Property Value

BigInteger

One

One fraction (1/1).

public static Fraction<TEva> One { get; }

Property Value

Fraction<TEva>

PositiveInf

Positive infinity fraction (1/0).

public static Fraction<TEva> PositiveInf { get; }

Property Value

Fraction<TEva>

RoughValue

Gets the roughly evaluated value. If the data has not been reduced, the return value is not evaluated by the reduced numbers.

public TEva RoughValue { get; }

Property Value

TEva

Sign

Gets the sign of the fraction (-1, 0, or 1).

public readonly int Sign { get; }

Property Value

int

Status

Gets the status flags.

public readonly FractionStatus Status { get; }

Property Value

FractionStatus

Value

Gets the evaluated value. Computes the value if not yet evaluated.

public TEva Value { get; }

Property Value

TEva

Zero

Zero fraction (0/1).

public static Fraction<TEva> Zero { get; }

Property Value

Fraction<TEva>

Methods

Abs()

Gets the absolute value as a new fraction.

public readonly Fraction<TEva> Abs()

Returns

Fraction<TEva>

CompareTo(Fraction<TEva>)

Compares this fraction with another.

public readonly int CompareTo(Fraction<TEva> other)

Parameters

other Fraction<TEva>

The other fraction.

Returns

int

-1 if less, 0 if equal, 1 if greater.

Equals(Fraction<TEva>)

Indicates whether the current object is equal to another object of the same type.

public readonly bool Equals(Fraction<TEva> other)

Parameters

other Fraction<TEva>

An object to compare with this object.

Returns

bool

true if the current object is equal to the other parameter; otherwise, false.

Equals(object)

Indicates whether this instance and a specified object are equal.

public override readonly bool Equals(object obj)

Parameters

obj object

The object to compare with the current instance.

Returns

bool

true if obj and this instance are the same type and represent the same value; otherwise, false.

Evaluate()

Evaluates the value if not already evaluated.

public Fraction<TEva> Evaluate()

Returns

Fraction<TEva>

This instance for chaining.

GetHashCode()

Returns the hash code for this instance.

public override int GetHashCode()

Returns

int

A 32-bit signed integer that is the hash code for this instance.

Negate()

Negates this fraction in place.

public Fraction<TEva> Negate()

Returns

Fraction<TEva>

This instance for chaining.

Pack()

Packs (reduces) the fraction to irreducible form if not already packed.

public Fraction<TEva> Pack()

Returns

Fraction<TEva>

This instance for chaining.

PerformanceTest(int, int)

Performance test for Fraction (pure C#). Test 1: Accumulative += with Val (bounded, linear growth). Test 2: Bounded arithmetic (converging average).

public static void PerformanceTest(int iterations = 128, int rounds = 16)

Parameters

iterations int

Number of steps per round.

rounds int

Number of rounds to average timing.

Reciprocal()

Gets the reciprocal as a new fraction.

public readonly Fraction<TEva> Reciprocal()

Returns

Fraction<TEva>

SetAbs()

Sets this fraction to its absolute value.

public Fraction<TEva> SetAbs()

Returns

Fraction<TEva>

This instance for chaining.

SetReciprocal()

Sets this fraction to its reciprocal.

public Fraction<TEva> SetReciprocal()

Returns

Fraction<TEva>

This instance for chaining.

SetSquare()

Sets this fraction to its square.

public Fraction<TEva> SetSquare()

Returns

Fraction<TEva>

This instance for chaining.

Simplify(TEva)

Simplifies the fraction to the specified resolution using Stern-Brocot binary search.

public Fraction<TEva> Simplify(TEva resolution)

Parameters

resolution TEva

The resolution tolerance.

Returns

Fraction<TEva>

This instance for chaining.

Square()

Gets the square as a new fraction.

public readonly Fraction<TEva> Square()

Returns

Fraction<TEva>

Test()

Test function for Fraction.

public static void Test()

ToString()

Returns the fully qualified type name of this instance.

public override readonly string ToString()

Returns

string

The fully qualified type name.

Val(TEva, TEva)

Creates a fraction by approximating a double value with specified resolution. Uses Stern-Brocot binary search.

public static Fraction<TEva> Val(TEva val, TEva resolution)

Parameters

val TEva

The double value to approximate.

resolution TEva

The resolution tolerance.

Returns

Fraction<TEva>

The approximated fraction.

Operators

operator +(Fraction<TEva>, Fraction<TEva>)

Addition: fraction + fraction.

public static Fraction<TEva> operator +(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

Fraction<TEva>

operator +(Fraction<TEva>, long)

Addition: fraction + integer.

public static Fraction<TEva> operator +(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

Fraction<TEva>

operator +(long, Fraction<TEva>)

Addition: integer + fraction.

public static Fraction<TEva> operator +(long a, Fraction<TEva> b)

Parameters

a long
b Fraction<TEva>

Returns

Fraction<TEva>

operator /(Fraction<TEva>, Fraction<TEva>)

Division: fraction / fraction.

public static Fraction<TEva> operator /(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

Fraction<TEva>

operator /(Fraction<TEva>, long)

Division: fraction / integer.

public static Fraction<TEva> operator /(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

Fraction<TEva>

operator /(long, Fraction<TEva>)

Division: integer / fraction.

public static Fraction<TEva> operator /(long a, Fraction<TEva> b)

Parameters

a long
b Fraction<TEva>

Returns

Fraction<TEva>

operator ==(Fraction<TEva>, Fraction<TEva>)

Equality operator.

public static bool operator ==(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator ==(Fraction<TEva>, long)

Equality with integer.

public static bool operator ==(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

explicit operator double(Fraction<TEva>)

Explicit conversion to double.

public static explicit operator double(Fraction<TEva> f)

Parameters

f Fraction<TEva>

Returns

double

operator >(Fraction<TEva>, Fraction<TEva>)

Greater than operator.

public static bool operator >(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator >(Fraction<TEva>, long)

Greater than integer.

public static bool operator >(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

operator >=(Fraction<TEva>, Fraction<TEva>)

Greater than or equal operator.

public static bool operator >=(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator >=(Fraction<TEva>, long)

Greater than or equal to integer.

public static bool operator >=(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

implicit operator Fraction<TEva>(int)

Implicit conversion from int.

public static implicit operator Fraction<TEva>(int v)

Parameters

v int

Returns

Fraction<TEva>

implicit operator Fraction<TEva>(long)

Implicit conversion from long.

public static implicit operator Fraction<TEva>(long v)

Parameters

v long

Returns

Fraction<TEva>

operator !=(Fraction<TEva>, Fraction<TEva>)

Inequality operator.

public static bool operator !=(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator !=(Fraction<TEva>, long)

Inequality with integer.

public static bool operator !=(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

operator <(Fraction<TEva>, Fraction<TEva>)

Less than operator.

public static bool operator <(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator <(Fraction<TEva>, long)

Less than integer.

public static bool operator <(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

operator <=(Fraction<TEva>, Fraction<TEva>)

Less than or equal operator.

public static bool operator <=(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

bool

operator <=(Fraction<TEva>, long)

Less than or equal to integer.

public static bool operator <=(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

bool

operator *(Fraction<TEva>, Fraction<TEva>)

Multiplication: fraction * fraction.

public static Fraction<TEva> operator *(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

Fraction<TEva>

operator *(Fraction<TEva>, long)

Multiplication: fraction * integer.

public static Fraction<TEva> operator *(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

Fraction<TEva>

operator *(long, Fraction<TEva>)

Multiplication: integer * fraction.

public static Fraction<TEva> operator *(long a, Fraction<TEva> b)

Parameters

a long
b Fraction<TEva>

Returns

Fraction<TEva>

operator -(Fraction<TEva>, Fraction<TEva>)

Subtraction: fraction - fraction.

public static Fraction<TEva> operator -(Fraction<TEva> a, Fraction<TEva> b)

Parameters

a Fraction<TEva>
b Fraction<TEva>

Returns

Fraction<TEva>

operator -(Fraction<TEva>, long)

Subtraction: fraction - integer.

public static Fraction<TEva> operator -(Fraction<TEva> a, long b)

Parameters

a Fraction<TEva>
b long

Returns

Fraction<TEva>

operator -(long, Fraction<TEva>)

Subtraction: integer - fraction.

public static Fraction<TEva> operator -(long a, Fraction<TEva> b)

Parameters

a long
b Fraction<TEva>

Returns

Fraction<TEva>

operator -(Fraction<TEva>)

Negation operator.

public static Fraction<TEva> operator -(Fraction<TEva> a)

Parameters

a Fraction<TEva>

Returns

Fraction<TEva>