modulo-N arithmetic (finite ring Z_N and Z_N[X]) More...
#include <vcl_iostream.h>
#include <vcl_cassert.h>
#include <vcl_vector.h>
#include <vcl_cstddef.h>
Go to the source code of this file.
Classes | |
class | vnl_finite_int< N > |
finite modulo-N arithmetic. More... | |
class | vnl_finite_int_poly< N, M > |
finite modulo-N arithmetic with polynomials of degree < M. More... | |
Functions | |
template<int N> | |
vcl_ostream & | operator<< (vcl_ostream &s, vnl_finite_int< N > const &r) |
formatted output. | |
template<int N> | |
vcl_istream & | operator>> (vcl_istream &s, vnl_finite_int< N > &r) |
simple input. | |
template<int N> | |
vnl_finite_int< N > | operator+ (vnl_finite_int< N > const &r1, vnl_finite_int< N > const &r2) |
Returns the sum of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator+ (vnl_finite_int< N > const &r1, int r2) |
Returns the sum of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator+ (int r2, vnl_finite_int< N > const &r1) |
Returns the sum of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator- (vnl_finite_int< N > const &r1, vnl_finite_int< N > const &r2) |
Returns the difference of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator- (vnl_finite_int< N > const &r1, int r2) |
Returns the difference of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator- (int r2, vnl_finite_int< N > const &r1) |
Returns the difference of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator* (vnl_finite_int< N > const &r1, vnl_finite_int< N > const &r2) |
Returns the product of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator* (vnl_finite_int< N > const &r1, int r2) |
Returns the product of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator* (int r2, vnl_finite_int< N > const &r1) |
Returns the product of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator/ (vnl_finite_int< N > const &r1, vnl_finite_int< N > const &r2) |
Returns the quotient of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator/ (vnl_finite_int< N > const &r1, int r2) |
Returns the quotient of two finite int numbers. | |
template<int N> | |
vnl_finite_int< N > | operator/ (int r1, vnl_finite_int< N > const &r2) |
Returns the quotient of two finite int numbers. | |
template<int N> | |
bool | operator== (int r1, vnl_finite_int< N > const &r2) |
template<int N> | |
bool | operator!= (int r1, vnl_finite_int< N > const &r2) |
template<int N> | |
vnl_finite_int< N > | vnl_math_squared_magnitude (vnl_finite_int< N > const &x) |
template<int N> | |
vnl_finite_int< N > | vnl_math_sqr (vnl_finite_int< N > const &x) |
template<int N> | |
bool | vnl_math_isnan (vnl_finite_int< N > const &) |
template<int N> | |
bool | vnl_math_isfinite (vnl_finite_int< N > const &x) |
template<int N, int M> | |
vnl_finite_int_poly< N, M > | operator+ (vnl_finite_int_poly< N, M > const &r1, vnl_finite_int_poly< N, M > const &r2) |
Returns the sum of two finite int polynomials. | |
template<int N, int M> | |
vnl_finite_int_poly< N, M > | operator- (vnl_finite_int_poly< N, M > const &r1, vnl_finite_int_poly< N, M > const &r2) |
Returns the difference of two finite int polynomials. | |
template<int N, int M> | |
vnl_finite_int_poly< N, M > | operator* (vnl_finite_int_poly< N, M > const &r1, vnl_finite_int< N > const &r2) |
Returns a scalar multiple of a finite int polynomial. | |
template<int N, int M> | |
vnl_finite_int_poly< N, M > | operator* (vnl_finite_int< N > const &r2, vnl_finite_int_poly< N, M > const &r1) |
Returns a scalar multiple of a finite int polynomial. | |
template<int N, int M> | |
vnl_finite_int_poly< N, M > | operator* (vnl_finite_int_poly< N, M > const &r1, vnl_finite_int_poly< N, M > const &r2) |
Multiplies two finite int polynomials. | |
template<int N, int M> | |
vcl_ostream & | operator<< (vcl_ostream &s, vnl_finite_int_poly< N, M > const &r) |
formatted output. |
modulo-N arithmetic (finite ring Z_N and Z_N[X])
The templated vnl_finite_int<N> provides arithmetic "modulo N", i.e., arithmetic in the finite (Galois) field GF(N) in case N is a prime or just in the finite ring (or semi-field) of integers modulo N otherwise. In that case division makes no sense (unless no zero divisor is involved), but all other operations remain valid.
Note that this does not cover finite fields with non-prime sizes (4,8,9,...). These are covered by the vnl_finite_int_poly<N,M> class, which implements arithmetic with polynomials of degree < M over vnl_finite_int<N>. Multiplication is defined modulo a degree M polynomial.
For N prime, and when the "modulo" polynomial is irreducible, vnl_finite_int_poly<N,M> implements the finite field GF(N^M).
Modifications 1 June 2002 - Peter Vanroose - added totient(), decompose(), is_unit(), order(), log(), exp(). 4 June 2002 - Peter Vanroose - renamed class and file name 8 June 2002 - Peter Vanroose - added vnl_finite_int_poly<N,M> 16 Dec 2007 - Peter Vanroose - more efficient implementation of Ntothe()
Definition in file vnl_finite.h.
bool operator!= | ( | int | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Definition at line 385 of file vnl_finite.h.
vnl_finite_int< N > operator* | ( | vnl_finite_int< N > const & | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns the product of two finite int numbers.
Definition at line 331 of file vnl_finite.h.
vnl_finite_int< N > operator* | ( | vnl_finite_int< N > const & | r1, |
int | r2 | ||
) | [inline] |
Returns the product of two finite int numbers.
Definition at line 339 of file vnl_finite.h.
vnl_finite_int< N > operator* | ( | int | r2, |
vnl_finite_int< N > const & | r1 | ||
) | [inline] |
Returns the product of two finite int numbers.
Definition at line 347 of file vnl_finite.h.
vnl_finite_int_poly< N, M > operator* | ( | vnl_finite_int_poly< N, M > const & | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns a scalar multiple of a finite int polynomial.
Definition at line 599 of file vnl_finite.h.
vnl_finite_int_poly< N, M > operator* | ( | vnl_finite_int< N > const & | r2, |
vnl_finite_int_poly< N, M > const & | r1 | ||
) | [inline] |
Returns a scalar multiple of a finite int polynomial.
Definition at line 608 of file vnl_finite.h.
vnl_finite_int_poly< N, M > operator* | ( | vnl_finite_int_poly< N, M > const & | r1, |
vnl_finite_int_poly< N, M > const & | r2 | ||
) | [inline] |
Multiplies two finite int polynomials.
NOTE: this requires the "modulo" polynomial to be set. Do this by calling modulo_polynomial(p), where p is a vector of length M+1.
Definition at line 618 of file vnl_finite.h.
vnl_finite_int< N > operator+ | ( | vnl_finite_int< N > const & | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns the sum of two finite int numbers.
Definition at line 283 of file vnl_finite.h.
vnl_finite_int< N > operator+ | ( | vnl_finite_int< N > const & | r1, |
int | r2 | ||
) | [inline] |
Returns the sum of two finite int numbers.
Definition at line 291 of file vnl_finite.h.
vnl_finite_int< N > operator+ | ( | int | r2, |
vnl_finite_int< N > const & | r1 | ||
) | [inline] |
Returns the sum of two finite int numbers.
Definition at line 299 of file vnl_finite.h.
vnl_finite_int_poly< N, M > operator+ | ( | vnl_finite_int_poly< N, M > const & | r1, |
vnl_finite_int_poly< N, M > const & | r2 | ||
) | [inline] |
Returns the sum of two finite int polynomials.
Definition at line 582 of file vnl_finite.h.
vnl_finite_int< N > operator- | ( | vnl_finite_int< N > const & | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns the difference of two finite int numbers.
Definition at line 307 of file vnl_finite.h.
vnl_finite_int< N > operator- | ( | vnl_finite_int< N > const & | r1, |
int | r2 | ||
) | [inline] |
Returns the difference of two finite int numbers.
Definition at line 315 of file vnl_finite.h.
vnl_finite_int< N > operator- | ( | int | r2, |
vnl_finite_int< N > const & | r1 | ||
) | [inline] |
Returns the difference of two finite int numbers.
Definition at line 323 of file vnl_finite.h.
vnl_finite_int_poly< N, M > operator- | ( | vnl_finite_int_poly< N, M > const & | r1, |
vnl_finite_int_poly< N, M > const & | r2 | ||
) | [inline] |
Returns the difference of two finite int polynomials.
Definition at line 590 of file vnl_finite.h.
vnl_finite_int< N > operator/ | ( | vnl_finite_int< N > const & | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns the quotient of two finite int numbers.
Uses r2.reciproc() for efficient computation.
Definition at line 356 of file vnl_finite.h.
vnl_finite_int< N > operator/ | ( | vnl_finite_int< N > const & | r1, |
int | r2 | ||
) | [inline] |
Returns the quotient of two finite int numbers.
Definition at line 364 of file vnl_finite.h.
vnl_finite_int< N > operator/ | ( | int | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Returns the quotient of two finite int numbers.
Definition at line 372 of file vnl_finite.h.
vcl_ostream & operator<< | ( | vcl_ostream & | s, |
vnl_finite_int< N > const & | r | ||
) | [inline] |
formatted output.
Definition at line 267 of file vnl_finite.h.
vcl_ostream & operator<< | ( | vcl_ostream & | s, |
vnl_finite_int_poly< N, M > const & | r | ||
) | [inline] |
formatted output.
Definition at line 626 of file vnl_finite.h.
bool operator== | ( | int | r1, |
vnl_finite_int< N > const & | r2 | ||
) | [inline] |
Definition at line 380 of file vnl_finite.h.
vcl_istream & operator>> | ( | vcl_istream & | s, |
vnl_finite_int< N > & | r | ||
) | [inline] |
simple input.
Definition at line 275 of file vnl_finite.h.
bool vnl_math_isfinite | ( | vnl_finite_int< N > const & | x | ) | [inline] |
Definition at line 405 of file vnl_finite.h.
bool vnl_math_isnan | ( | vnl_finite_int< N > const & | ) | [inline] |
Definition at line 400 of file vnl_finite.h.
vnl_finite_int< N > vnl_math_sqr | ( | vnl_finite_int< N > const & | x | ) | [inline] |
Definition at line 395 of file vnl_finite.h.
vnl_finite_int< N > vnl_math_squared_magnitude | ( | vnl_finite_int< N > const & | x | ) | [inline] |
Definition at line 390 of file vnl_finite.h.