#include <iostream>
#ifndef __GIVARO_DEBUG
#define __GIVARO_DEBUG 1
#endif
#include <givaro/givrandom.h>
#include <givaro/givtimer.h>
#include <givaro/gfq.h>
#include <givaro/givpoly1.h>
#include <givaro/givtruncdomain.h>
#include <givaro/givhighorder.h>
typedef GFqDom<int>
Field;
typedef Poly1Dom< Field, Dense>
Polys;
bool success = false, successF=false;
try {
HighOrders::Truncated TQ;
Degree dp; HO101.getpoldom().degree(dp, P);
HO101.gettruncdom().assign(TQ, oQ,0,dp-1);
HO101.gettruncdom().convert(Q, TQ);
Fra._num = Q;
Fra._den = P;
Timer tt; tt.clear(); tt.start();
HO101.taylor(TTy, Fra,
b);
tt.stop();
HighOrders::Truncated TTy17;
HO101.gettruncdom().assign(TTy17, TTy,
a,
b);
HighOrders::Truncated TTy17b;
HO101.FracDevel(TTy17b, Fra,
a,
b);
tt.stop();
success = HO101.gettruncdom().areEqual(TTy17,TTy17b);
if (! success) {
std::cerr << "---------- BEG ERROR ----------" <<std::endl;
HO101.getpoldom().write(std::cerr << "Q:=", Q) << ';' << std::endl;
HO101.getpoldom().write(std::cerr << "P:=", P) << ';' << std::endl;
HO101.getpoldom().write(std::cerr << "TTy:=", TTy) << ';' << std::endl;
HO101.write(std::cerr << "TTy17:=", TTy17) << ';' << std::endl;
HO101.write(std::cerr << "TTy17b:=", TTy17b) << ';' << std::endl;
std::cerr << "---------- END ERROR ----------" <<std::endl;
}
HighOrders::Truncated TTy17c; HO101.gettruncdom().init(TTy17c);
HighOrders::Truncated TTy17d; HO101.gettruncdom().init(TTy17d);
HO101.Fiduccia(TTy17c, Fra,
a,
b);
tt.stop();
successF = HO101.gettruncdom().areEqual(TTy17,TTy17c);
if (! successF) {
std::cerr << "---------- BEG ERROR ----------" <<std::endl;
HO101.getpoldom().write(std::cerr << "Q:=", Q) << ';' << std::endl;
HO101.getpoldom().write(std::cerr << "P:=", P) << ';' << std::endl;
HO101.getpoldom().write(std::cerr << "TTy:=", TTy) << ';' << std::endl;
HO101.write(std::cerr << "TTy17:=", TTy17) << ';' << std::endl;
HO101.write(std::cerr << "TTy17c:=", TTy17c) << ';' << std::endl;
std::cerr << "---------- END ERROR ----------" <<std::endl;
} else {
}
} catch (GivError &e) {
std::cerr << e << std::endl;
}
return success && successF;
}
int main(
int argc,
char ** argv) {
long numb = (argc>1?atoi(argv[1]):200);
std::cerr << "numb: " << numb << std::endl;
long tttn = (argc>2?atoi(argv[2]):100);
std::cerr << "tttn: " << tttn << std::endl;
long seed = (argc>3?atoi(argv[3]):BaseTimer::seed());
std::cerr << "seed: " << seed << std::endl;
Polys DP101( Z101, Indeter(
"X") );
GivRandom generator((unsigned long)seed);
long deg1 = (long) generator() % 6;
long deg2 = (long) generator() % 6;
long deg3 = (long) generator() % 155;
DP101.random(generator, P, Degree(deg1) );
DP101.random(generator, Q, Degree(deg2) );
DP101.random(generator, R, Degree(deg3) );
Degree dP; DP101.degree(dP,P);
Degree dQ; DP101.degree(dQ,Q);
Degree dR; DP101.degree(dR,R);
DP101.write(std::cout << "P:=", P) << ';' << std::endl;
F._num = DP101.one;
F._den = P;
HO101.taylor(Tay, F, 128);
DP101.write(std::cout << "Tay:=", Tay) << ';' << std::endl;
size_t e = 0 ;
HighOrders::Truncated G0;
HO101.GammaId(G0, S, dS, (long)e, P, dP);
std::cout << "e:=" << e << ';' << std::endl;
HO101.write(std::cout << "G0:=", G0) << ';' << std::endl;
DP101.write(std::cout << "S:=", S) << ';' << std::endl;
std::vector<HighOrders::Truncated> Gam, T;
std::vector<Degree> D;
HO101.highorder(Gam, T, D, nTay, dT, Degree(970), Degree(1000), P, dP);
HO101.write(std::cout << "Gam:=", Gam.back()) << ';' << std::endl;
HighOrders::Truncated TP; HO101.gettruncdom().assign(TP, P);
HighOrders::Truncated I;
HO101.Inverse(I, 113, 127, TP, dP, nTay, dT, Gam, T, D);
HO101.write(std::cout << "I]_155^175:=", I) << ';' << std::endl;
bool success=true;
for(long i=0; i<numb; ++i) {
long Deg1 = (long)generator() % ((66*tttn)/100);
long Deg2 = (long)generator() % ((65*tttn)/100);
long v1 = (long)generator() % ((19195*tttn)/100);
long v2 = v1 + ((long)generator() % (long)((45*tttn)/100));
DP101.random(generator, P, Degree(Deg1) );
DP101.random(generator, Q, Degree(Deg2) );
}
std::cerr <<
"Taylor: " <<
Ttaylor << std::endl;
std::cerr <<
"HighOrder: " <<
Thighorder << std::endl;
std::cerr <<
"Fiduccia: " <<
Tfiduccia << std::endl;
if (! success) {
std::cerr << "Error: " << seed << std::endl;
} else {
std::cerr <<
"Success:" <<
TFDcount << std::endl;
}
std::cerr <<
"Success F:" <<
FiDcount << std::endl;
return 0;
}
int main(int argc, char **argv)
Definition: benchmark-recint_exp.C:20
void clear()
Clear timer.
Definition: givtimer.C:155
long long FiDcount
Definition: highorder.C:35
Timer Thighorder
Definition: highorder.C:36
Poly1Dom< Field, Dense > Polys
Definition: highorder.C:30
HighOrder< Field > HighOrders
Definition: highorder.C:31
bool TestFracDevel(const HighOrders &HO101, const Polys::Element P, const Polys::Element oQ, Degree a, Degree b)
Definition: highorder.C:40
Timer Ttaylor
Definition: highorder.C:36
Timer Tfiduccia
Definition: highorder.C:36
long long TFDcount
Definition: highorder.C:34
Namespace in which the whole Givaro library resides.
Definition: all_field.C:23
GFqDom< int64_t > Field
Definition: domain_to_operatorstyle.C:24
StaticElement< Field > Element
Definition: domain_to_operatorstyle.C:27
MG & a
Definition: rmadd.h:143
MG const rmint< K, MG > & b
Definition: rmadd.h:143