#include <iostream>
#include <givaro/gfq.h>
#include <givaro/montgomery.h>
#include <givaro/modular.h>
#include <givaro/StaticElement.h>
#ifdef GIVARO_USE_SIXTYFOUR
typedef Modular<int64_t>
Field8;
typedef StaticElement< Field8 > Element8;
template<>
#endif
}
template<class Field, class Element>
{
uint64_t P = 251;
Element a(2),
b(-29.8),
c(33),d(Integer(
"123456789012345678901234567890")),e(0);
e += (
a =
b); std::cout <<
a <<
" = " <<
b <<
" mod " << P <<
";" << std::endl;
e += (
a =
b +
c); std::cout <<
a <<
" = " <<
b <<
" + " <<
c <<
" mod " << P <<
";" << std::endl;
e += (
a =
b -
c); std::cout <<
a <<
" = " <<
b <<
" - " <<
c <<
" mod " << P <<
";" << std::endl;
e += (
a =
b *
c); std::cout <<
a <<
" = " <<
b <<
" * " <<
c <<
" mod " << P <<
";" << std::endl;
e += (
a =
b /
c); std::cout <<
a <<
" = " <<
b <<
" / " <<
c <<
" mod " << P <<
";" << std::endl;
std::cout << d <<
" + " <<
a <<
" mod " << P <<
" = "; e += (d +=
a); std::cout << d <<
";" << std::endl;
std::cout << d <<
" - " <<
a <<
" mod " << P <<
" = "; e += (d -=
a); std::cout << d <<
";" << std::endl;
std::cout << d <<
" * " <<
a <<
" mod " << P <<
" = "; e += (d *=
a); std::cout << d <<
";" << std::endl;
std::cout << d <<
" / " <<
a <<
" mod " << P <<
" = "; e += (d /=
a); std::cout << d <<
";" << std::endl;
std::cout <<
a <<
" is non zero ? " << (
a !=
Element(0) ) << std::endl;
a = 0; std::cout <<
a <<
" is zero ? " << (
a ==
Element(0) ) << std::endl;
double dd(0.0); dd += (double)(e); dd += (float)e; dd += (uint32_t)e;
}
int main(
int argc,
char ** argv) {
TestField<Field1, Element1>();
TestField<Field2, Element2>();
TestField<Field3, Element3>();
TestField<Field4, Element4>();
TestField<Field5, Element5>();
TestField<Field6, Element6>();
TestField<Field7, Element7>();
#ifdef GIVARO_USE_SIXTYFOUR
TestField<Field8, Element8>();
#endif
return 0;
}
Modular< int64_t > Field5
Definition: PolynomialCRT.C:35
GFqDom< int64_t > Field1
Definition: PolynomialCRT.C:31
Modular< int32_t > Field4
Definition: PolynomialCRT.C:34
Modular< int16_t > Field2
Definition: PolynomialCRT.C:32
Montgomery< int32_t > Field7
Definition: PolynomialCRT.C:37
Modular< Log16 > Field3
Definition: PolynomialCRT.C:33
QField< Rational > Field8
Definition: PolynomialCRT.C:38
Modular< uint32_t > Field6
Definition: PolynomialCRT.C:36
void TestField()
Definition: all_field.C:42
int main(int argc, char **argv)
Definition: benchmark-recint_exp.C:20
UTT Residu_t
Definition: gfq.h:91
std::ostream & write(std::ostream &s) const
Definition: gfq.inl:606
Field::Element Element
Definition: f4n3.cpp:12
Namespace in which the whole Givaro library resides.
Definition: all_field.C:23
StaticElement< Field1 > Element1
Definition: all_field.C:25
StaticElement< Field6 > Element6
Definition: all_field.C:30
StaticElement< Field4 > Element4
Definition: all_field.C:28
Modular< Integer > Field4
Definition: all_field.C:28
Modular< uint32_t > Field1
Definition: all_field.C:25
GFqDom< int64_t > Field2
Definition: all_field.C:26
GFqDom< int64_t > Field
Definition: domain_to_operatorstyle.C:24
Montgomery< int32_t > Field3
Definition: all_field.C:27
StaticElement< Field > Element
Definition: domain_to_operatorstyle.C:27
StaticElement< Field7 > Element7
Definition: all_field.C:31
StaticElement< Field2 > Element2
Definition: all_field.C:26
Modular< Log16 > Field7
Definition: all_field.C:31
StaticElement< Field3 > Element3
Definition: all_field.C:27
StaticElement< Field5 > Element5
Definition: all_field.C:29
Modular< int16_t > Field6
Definition: all_field.C:30
Modular< int32_t > Field5
Definition: all_field.C:29
MG & a
Definition: rmadd.h:143
MG const rmint< K, MG > const T & c
Definition: rmadd.h:143
MG const rmint< K, MG > & b
Definition: rmadd.h:143
static const Domain & getDomain()
Definition: StaticElement.h:40
static void setDomain(const Domain &D)
Definition: StaticElement.h:36
static Domain _domain
Definition: StaticElement.h:32