ProjGeom 1.0.11
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Friends | List of all members
fun::Fraction< Z > Struct Template Reference

Fraction. More...

#include <fractions.hpp>

Collaboration diagram for fun::Fraction< Z >:
Collaboration graph
[legend]

Public Member Functions

constexpr Fraction (Z num, Z den)
 Construct a new Fraction object from two values.
 
constexpr auto normalize () -> Z
 normalize to a canonical form
 
constexpr void normalize1 ()
 normalize to a canonical form
 
constexpr auto normalize2 () -> Z
 normalize to a canonical form
 
constexpr Fraction (Z &&num)
 Construct a new Fraction object from a single value (rvalue).
 
constexpr Fraction (const Z &num)
 Construct a new Fraction object from a single value (const ref).
 
constexpr Fraction ()
 Default construct a new Fraction object (0/1).
 
constexpr auto num () const noexcept -> const Z &
 
constexpr auto den () const noexcept -> const Z &
 
constexpr auto cross (const Fraction &rhs) const -> Z
 Cross product of two fractions.
 
constexpr void reciprocal () noexcept(std::is_nothrow_swappable_v< Z >)
 reciprocal
 
constexpr auto operator*= (Fraction rhs) -> Fraction &
 multiply and assign
 
constexpr auto operator*= (Z rhs) -> Fraction &
 multiply and assign
 
constexpr auto operator/= (Fraction rhs) -> Fraction &
 divide and assign
 
constexpr auto operator/= (const Z &rhs) -> Fraction &
 divide and assign
 
constexpr auto operator- () const -> Fraction
 Negate.
 
constexpr auto operator+ (const Fraction &rhs) const -> Fraction
 Add.
 
constexpr auto operator- (const Fraction &frac) const -> Fraction
 Subtract.
 
constexpr auto operator- (const Z &i) const -> Fraction
 
constexpr auto operator+= (const Fraction &rhs) -> Fraction &
 
constexpr auto operator-= (const Fraction &rhs) -> Fraction &
 
constexpr auto operator+= (const Z &i) -> Fraction &
 
constexpr auto operator-= (const Z &rhs) -> Fraction &
 

Public Attributes

_num
 
_den
 

Friends

constexpr auto operator* (Fraction lhs, const Fraction &rhs) -> Fraction
 multiply
 
constexpr auto operator* (Fraction lhs, const Z &rhs) -> Fraction
 multiply
 
constexpr auto operator* (const Z &lhs, Fraction rhs) -> Fraction
 multiply
 
constexpr auto operator/ (Fraction lhs, const Fraction &rhs) -> Fraction
 divide
 
constexpr auto operator/ (Fraction lhs, const Z &rhs) -> Fraction
 divide
 
constexpr auto operator/ (const Z &lhs, Fraction rhs) -> Fraction
 divide
 
constexpr auto operator+ (Fraction frac, const Z &i) -> Fraction
 Add.
 
constexpr auto operator+ (const Z &i, Fraction frac) -> Fraction
 Add.
 
constexpr auto operator- (const Z &c, const Fraction &frac) -> Fraction
 
constexpr auto operator+ (int &&c, const Fraction &frac) -> Fraction
 
constexpr auto operator- (int &&c, const Fraction &frac) -> Fraction
 
constexpr auto operator* (int &&c, const Fraction &frac) -> Fraction
 
template<typename Stream >
auto operator<< (Stream &os, const Fraction &frac) -> Stream &
 

Comparison operators

==, !=, <, >, <=, >= etc.

constexpr auto operator!= (const Fraction &rhs) const -> bool
 
constexpr auto operator> (const Fraction &rhs) const -> bool
 Greater than.
 
constexpr auto operator>= (const Fraction &rhs) const -> bool
 Greater than or euqal to.
 
constexpr auto operator<= (const Fraction &rhs) const -> bool
 Less than or equal to.
 
constexpr auto operator> (const Z &rhs) const -> bool
 Greater than.
 
constexpr auto operator<= (const Z &rhs) const -> bool
 Less than or equal to.
 
constexpr auto operator>= (const Z &rhs) const -> bool
 Greater than or equal to.
 
constexpr auto operator== (Fraction lhs, Z rhs) -> bool
 Equal to.
 
constexpr auto operator< (Fraction lhs, Z rhs) -> bool
 Less than.
 
constexpr auto operator< (Z lhs, Fraction rhs) -> bool
 Less than.
 
constexpr auto operator== (const Z &lhs, const Fraction &rhs) -> bool
 Equal to.
 
constexpr friend auto operator== (Fraction lhs, Fraction rhs) -> bool
 Equal to.
 
constexpr friend auto operator< (Fraction lhs, Fraction rhs) -> bool
 Less than.
 
constexpr auto operator> (const Z &lhs, const Fraction &rhs) -> bool
 Greater than.
 
constexpr auto operator<= (const Z &lhs, const Fraction &rhs) -> bool
 Less than or equal to.
 
constexpr auto operator>= (const Z &lhs, const Fraction &rhs) -> bool
 Greater than or euqal to.
 

Detailed Description

template<Integral Z>
struct fun::Fraction< Z >

Fraction.

Template Parameters
Z

Constructor & Destructor Documentation

◆ Fraction() [1/4]

template<Integral Z>
constexpr fun::Fraction< Z >::Fraction ( num,
den 
)
inlineconstexpr

Construct a new Fraction object from two values.

Parameters
[in]numnumerator
[in]dendenominator

◆ Fraction() [2/4]

template<Integral Z>
constexpr fun::Fraction< Z >::Fraction ( Z &&  num)
inlineexplicitconstexpr

Construct a new Fraction object from a single value (rvalue).

◆ Fraction() [3/4]

template<Integral Z>
constexpr fun::Fraction< Z >::Fraction ( const Z &  num)
inlineexplicitconstexpr

Construct a new Fraction object from a single value (const ref).

◆ Fraction() [4/4]

template<Integral Z>
constexpr fun::Fraction< Z >::Fraction ( )
inlineconstexpr

Default construct a new Fraction object (0/1).

Member Function Documentation

◆ cross()

template<Integral Z>
constexpr auto fun::Fraction< Z >::cross ( const Fraction< Z > &  rhs) const -> Z
inlineconstexpr

Cross product of two fractions.

\[ a/b \times c/d = ad - bc \]

Parameters
[in]rhs
Returns
Z

◆ den()

template<Integral Z>
constexpr auto fun::Fraction< Z >::den ( ) const -> const Z&
inlineconstexprnoexcept
Returns
const Z&

◆ normalize()

template<Integral Z>
constexpr auto fun::Fraction< Z >::normalize ( ) -> Z
inlineconstexpr

normalize to a canonical form

denominator is always non-negative and co-prime with numerator

◆ normalize1()

template<Integral Z>
constexpr void fun::Fraction< Z >::normalize1 ( )
inlineconstexpr

normalize to a canonical form

denominator is always non-negative

◆ normalize2()

template<Integral Z>
constexpr auto fun::Fraction< Z >::normalize2 ( ) -> Z
inlineconstexpr

normalize to a canonical form

denominator is always co-prime with numerator

◆ num()

template<Integral Z>
constexpr auto fun::Fraction< Z >::num ( ) const -> const Z&
inlineconstexprnoexcept
Returns
const Z&

◆ operator!=()

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator!= ( const Fraction< Z > &  rhs) const -> bool
inlineconstexpr
Parameters
[in]rhs
Returns
true
false

◆ operator*=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator*= ( Fraction< Z >  rhs) -> Fraction&
inlineconstexpr

multiply and assign

Parameters
[in]rhs
Returns
Fraction&

◆ operator*=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator*= ( rhs) -> Fraction&
inlineconstexpr

multiply and assign

Parameters
[in]rhs
Returns
Fraction&

◆ operator+()

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator+ ( const Fraction< Z > &  rhs) const -> Fraction
inlineconstexpr

Add.

Parameters
[in]rhs
Returns
Fraction

◆ operator+=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator+= ( const Fraction< Z > &  rhs) -> Fraction&
inlineconstexpr
Parameters
[in]rhs
Returns
Fraction

◆ operator+=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator+= ( const Z &  i) -> Fraction&
inlineconstexpr
Parameters
[in]i
Returns
Fraction

◆ operator-() [1/3]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator- ( ) const -> Fraction
inlineconstexpr

Negate.

Returns
Fraction

◆ operator-() [2/3]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator- ( const Fraction< Z > &  frac) const -> Fraction
inlineconstexpr

Subtract.

Parameters
[in]frac
Returns
Fraction

◆ operator-() [3/3]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator- ( const Z &  i) const -> Fraction
inlineconstexpr
Parameters
[in]i
Returns
Fraction

◆ operator-=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator-= ( const Fraction< Z > &  rhs) -> Fraction&
inlineconstexpr
Parameters
[in]rhs
Returns
Fraction

◆ operator-=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator-= ( const Z &  rhs) -> Fraction&
inlineconstexpr
Parameters
[in]rhs
Returns
Fraction

◆ operator/=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator/= ( const Z &  rhs) -> Fraction&
inlineconstexpr

divide and assign

Parameters
[in]rhs
Returns
Fraction&

◆ operator/=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator/= ( Fraction< Z >  rhs) -> Fraction&
inlineconstexpr

divide and assign

Parameters
[in]rhs
Returns
Fraction&

◆ operator<=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator<= ( const Fraction< Z > &  rhs) const -> bool
inlineconstexpr

Less than or equal to.

Parameters
[in]rhs
Returns
true
false

◆ operator<=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator<= ( const Z &  rhs) const -> bool
inlineconstexpr

Less than or equal to.

Parameters
[in]rhs
Returns
true
false

◆ operator>() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator> ( const Fraction< Z > &  rhs) const -> bool
inlineconstexpr

Greater than.

Parameters
[in]rhs
Returns
true
false

◆ operator>() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator> ( const Z &  rhs) const -> bool
inlineconstexpr

Greater than.

Parameters
[in]rhs
Returns
true
false

◆ operator>=() [1/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator>= ( const Fraction< Z > &  rhs) const -> bool
inlineconstexpr

Greater than or euqal to.

Parameters
[in]rhs
Returns
true
false

◆ operator>=() [2/2]

template<Integral Z>
constexpr auto fun::Fraction< Z >::operator>= ( const Z &  rhs) const -> bool
inlineconstexpr

Greater than or equal to.

Parameters
[in]rhs
Returns
true
false

◆ reciprocal()

template<Integral Z>
constexpr void fun::Fraction< Z >::reciprocal ( )
inlineconstexprnoexcept

reciprocal

Friends And Related Symbol Documentation

◆ operator* [1/4]

template<Integral Z>
constexpr auto operator* ( const Z &  lhs,
Fraction< Z >  rhs 
) -> Fraction
friend

multiply

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator* [2/4]

template<Integral Z>
constexpr auto operator* ( Fraction< Z >  lhs,
const Fraction< Z > &  rhs 
) -> Fraction
friend

multiply

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator* [3/4]

template<Integral Z>
constexpr auto operator* ( Fraction< Z >  lhs,
const Z &  rhs 
) -> Fraction
friend

multiply

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator* [4/4]

template<Integral Z>
constexpr auto operator* ( int &&  c,
const Fraction< Z > &  frac 
) -> Fraction
friend
Parameters
[in]c
[in]frac
Returns
Fraction<Z>

◆ operator+ [1/3]

template<Integral Z>
constexpr auto operator+ ( const Z &  i,
Fraction< Z >  frac 
) -> Fraction
friend

Add.

Parameters
[in]i
[in]frac
Returns
Fraction

◆ operator+ [2/3]

template<Integral Z>
constexpr auto operator+ ( Fraction< Z >  frac,
const Z &  i 
) -> Fraction
friend

Add.

Parameters
[in]frac
[in]i
Returns
Fraction

◆ operator+ [3/3]

template<Integral Z>
constexpr auto operator+ ( int &&  c,
const Fraction< Z > &  frac 
) -> Fraction
friend
Parameters
[in]c
[in]frac
Returns
Fraction

◆ operator- [1/2]

template<Integral Z>
constexpr auto operator- ( const Z &  c,
const Fraction< Z > &  frac 
) -> Fraction
friend
Parameters
[in]c
[in]frac
Returns
Fraction

◆ operator- [2/2]

template<Integral Z>
constexpr auto operator- ( int &&  c,
const Fraction< Z > &  frac 
) -> Fraction
friend
Parameters
[in]c
[in]frac
Returns
Fraction

◆ operator/ [1/3]

template<Integral Z>
constexpr auto operator/ ( const Z &  lhs,
Fraction< Z >  rhs 
) -> Fraction
friend

divide

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator/ [2/3]

template<Integral Z>
constexpr auto operator/ ( Fraction< Z >  lhs,
const Fraction< Z > &  rhs 
) -> Fraction
friend

divide

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator/ [3/3]

template<Integral Z>
constexpr auto operator/ ( Fraction< Z >  lhs,
const Z &  rhs 
) -> Fraction
friend

divide

Parameters
[in]lhs
[in]rhs
Returns
Fraction

◆ operator< [1/3]

template<Integral Z>
constexpr friend auto operator< ( Fraction< Z >  lhs,
Fraction< Z >  rhs 
) -> bool
friend

Less than.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator< [2/3]

template<Integral Z>
constexpr auto operator< ( Fraction< Z >  lhs,
rhs 
) -> bool
friend

Less than.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator< [3/3]

template<Integral Z>
constexpr auto operator< ( lhs,
Fraction< Z >  rhs 
) -> bool
friend

Less than.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator<<

template<Integral Z>
template<typename Stream >
auto operator<< ( Stream &  os,
const Fraction< Z > &  frac 
) -> Stream&
friend
Template Parameters
Stream
Z
Parameters
[in]os
[in]frac
Returns
Stream&

◆ operator<=

template<Integral Z>
constexpr auto operator<= ( const Z &  lhs,
const Fraction< Z > &  rhs 
) -> bool
friend

Less than or equal to.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator== [1/3]

template<Integral Z>
constexpr auto operator== ( const Z &  lhs,
const Fraction< Z > &  rhs 
) -> bool
friend

Equal to.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator== [2/3]

template<Integral Z>
constexpr friend auto operator== ( Fraction< Z >  lhs,
Fraction< Z >  rhs 
) -> bool
friend

Equal to.

Parameters
[in]rhs
Returns
true
false

Equal to

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator== [3/3]

template<Integral Z>
constexpr auto operator== ( Fraction< Z >  lhs,
rhs 
) -> bool
friend

Equal to.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator>

template<Integral Z>
constexpr auto operator> ( const Z &  lhs,
const Fraction< Z > &  rhs 
) -> bool
friend

Greater than.

Parameters
[in]lhs
[in]rhs
Returns
true
false

◆ operator>=

template<Integral Z>
constexpr auto operator>= ( const Z &  lhs,
const Fraction< Z > &  rhs 
) -> bool
friend

Greater than or euqal to.

Parameters
[in]lhs
[in]rhs
Returns
true
false

Member Data Documentation

◆ _den

template<Integral Z>
Z fun::Fraction< Z >::_den

◆ _num

template<Integral Z>
Z fun::Fraction< Z >::_num

The documentation for this struct was generated from the following file: