int main(int argc, char *argv[]) { int w = width(); assert(w <= 16); float returned_result[16]; for (int i = 0; i < 16; ++i) returned_result[i] = -1e20; float vfloat[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; double vdouble[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int vint[16] = { 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32 }; int vint2[16] = { 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; float b = 5.; #if (TEST_SIG == 0) f_v(returned_result); #elif (TEST_SIG == 1) f_f(returned_result, vfloat); #elif (TEST_SIG == 2) f_fu(returned_result, vfloat, b); #elif (TEST_SIG == 3) f_fi(returned_result, vfloat, vint); #elif (TEST_SIG == 4) f_du(returned_result, vdouble, 5.); #elif (TEST_SIG == 5) f_duf(returned_result, vdouble, 5.f); #elif (TEST_SIG == 6) f_di(returned_result, vdouble, vint2); #else #error "Unknown or unset TEST_SIG value" #endif float expected_result[16]; memset(expected_result, 0, 16*sizeof(float)); result(expected_result); int errors = 0; for (int i = 0; i < w; ++i) { if (returned_result[i] != expected_result[i]) { #ifdef EXPECT_FAILURE // bingo, failed return 1; #else printf("%s: value %d disagrees: returned %f [%a], expected %f [%a]\n", argv[0], i, returned_result[i], returned_result[i], expected_result[i], expected_result[i]); ++errors; #endif // EXPECT_FAILURE } } #ifdef EXPECT_FAILURE // Don't expect to get here return 0; #else return errors > 0; #endif }
int evaluate(int t) { int err = 0; /* switch on lookup */ switch(t) { case '+': case '-': case '*': case '/': /* binaere rechenoperation */ /* wenn fehlerwert zurueckgegeben wird wird die fehlerroutine aufgerufen */ if((err = binop_f(t))) error(err); break; /* stack metafunctionen */ case 'p': if((err = p_f())) error(err); break; case 'f': if((err = f_f())) error(err); break; case 'c': if((err = c_f())) error(err); break; case 'd': if((err = d_f())) error(err); break; case 'r': if((err = r_f())) error(err); break; /* EOS fuer stdin oder 'q' -> quit */ case EOF: printf("Reached end of input.\n"); case 'q': printf("Goodbye.\n"); return FALSE; default: /* wenn lookup whitespace ist, ignorieren */ if(isws(t)) ; /* andernfalls wenn lookup eine ziffer ist zahl einlesen und auf den stack legen */ else if(isnum(t)) { uint v = 0; if((err = read_int(&v)) || (err = stack_push(v))) { error(err); } /* recursion damit der lookup nach einlesen der zahl nicht in main ueberschrieben wird. */ return evaluate(lookup(NULL)); } /* andernfalls ist ein unbekannter befehl eingelesen worden */ else { error(ERR_MAIN_UNKNOWN); } } return TRUE; }
int main() { setbuf(stdout, NULL); SetSeed(ZZ(0)); for (long l = 256; l <= 16384; l *= 2) { // for (long n = 256; n <= 16384; n *= 2) { for (long idx = 0; idx < 13; idx ++) { long n = 256*(1L << idx/2); if (idx & 1) n += n/2; SetSeed((ZZ(l) << 64) + ZZ(n)); ZZ p; RandomLen(p, l); if (!IsOdd(p)) p++; ZZ_p::init(p); ZZ_pX a, c, f; random(a, n); random(f, n); SetCoeff(f, n); ZZ_pXModulus F(f); double t; SqrMod(c, a, F); long iter = 1; do { t = GetTime(); for (long i = 0; i < iter; i++) SqrMod(c, a, F); t = GetTime() - t; iter *= 2; } while (t < 3); iter /= 2; t = GetTime(); for (long i = 0; i < iter; i++) SqrMod(c, a, F); t = GetTime()-t; double NTLTime = t; FlintZZ_pX f_a(a), f_c, f_f(f), f_finv; fmpz_mod_poly_reverse(f_finv.value, f_f.value, f_f.value->length); fmpz_mod_poly_inv_series_newton(f_finv.value, f_finv.value, f_f.value->length); fmpz_mod_poly_mulmod_preinv(f_c.value, f_a.value, f_a.value, f_f.value, f_finv.value); t = GetTime(); for (long i = 0; i < iter; i++) fmpz_mod_poly_mulmod_preinv(f_c.value, f_a.value, f_a.value, f_f.value, f_finv.value); t = GetTime()-t; double FlintTime = t; printf("%8.2f", FlintTime/NTLTime); } printf("\n"); } }
int main(int argc, char *argv[]) { int w = width(); assert(w <= 64); ALIGN float returned_result[64]; ALIGN float vfloat[64]; ALIGN double vdouble[64]; ALIGN int vint[64]; ALIGN int vint2[64]; for (int i = 0; i < 64; ++i) { returned_result[i] = -1e20; vfloat[i] = i+1; vdouble[i] = i+1; vint[i] = 2*(i+1); vint2[i] = i+5; } float b = 5.; #if (TEST_SIG == 0) f_v(returned_result); #elif (TEST_SIG == 1) f_f(returned_result, vfloat); #elif (TEST_SIG == 2) f_fu(returned_result, vfloat, b); #elif (TEST_SIG == 3) f_fi(returned_result, vfloat, vint); #elif (TEST_SIG == 4) f_du(returned_result, vdouble, 5.); #elif (TEST_SIG == 5) f_duf(returned_result, vdouble, 5.f); #elif (TEST_SIG == 6) f_di(returned_result, vdouble, vint2); #elif (TEST_SIG == 7) *returned_result = sizeof(ispc::f_sz); #else #error "Unknown or unset TEST_SIG value" #endif float expected_result[64]; memset(expected_result, 0, 64*sizeof(float)); result(expected_result); int errors = 0; for (int i = 0; i < w; ++i) { if (returned_result[i] != expected_result[i]) { #ifdef EXPECT_FAILURE // bingo, failed return 1; #else printf("%s: value %d disagrees: returned %f [%a], expected %f [%a]\n", argv[0], i, returned_result[i], returned_result[i], expected_result[i], expected_result[i]); ++errors; #endif // EXPECT_FAILURE } } #ifdef EXPECT_FAILURE // Don't expect to get here return 0; #else return errors > 0; #endif }
int main() { setbuf(stdout, NULL); for (long l = 5; l <= 60; l += 5) { // for (long n = 1024; n <= 65536; n *= 2) { for (long idx = 0; idx < 13; idx ++) { long n = 1024*(1L << idx/2); if (idx & 1) n += n/2; SetSeed((ZZ(l) << 64) + ZZ(n)); long p; RandomLen(p, l); if (p % 2 == 0) p++; zz_p::init(p); zz_pX a, b, c, f; random(a, n); random(b, n); random(f, n); SetCoeff(f, n); zz_pXModulus F(f); zz_pXMultiplier B(b, F); double t; MulMod(c, a, B, F); long iter = 1; do { t = GetTime(); for (long i = 0; i < iter; i++) MulMod(c, a, B, F); t = GetTime() - t; iter *= 2; } while (t < 3); iter /= 2; t = GetTime(); for (long i = 0; i < iter; i++) MulMod(c, a, B, F); t = GetTime()-t; double NTLTime = t; Flintzz_pX f_a(a), f_b(b), f_c, f_f(f), f_finv; nmod_poly_reverse(f_finv.value, f_f.value, f_f.value->length); nmod_poly_inv_series_newton(f_finv.value, f_finv.value, f_f.value->length); nmod_poly_mulmod_preinv(f_c.value, f_a.value, f_b.value, f_f.value, f_finv.value); t = GetTime(); for (long i = 0; i < iter; i++) nmod_poly_mulmod_preinv(f_c.value, f_a.value, f_b.value, f_f.value, f_finv.value); t = GetTime()-t; double FlintTime = t; printf("%8.2f", FlintTime/NTLTime); } printf("\n"); } }
void float_tests (void) { av_alist a; float fr; fr = f_f(f1); fprintf(out,"->%g\n",fr); fflush(out); fr = 0.0; clear_traces(); av_start_float(a,f_f,&fr); av_float(a,f1); av_call(a); fprintf(out,"->%g\n",fr); fflush(out); fr = f_f2(f1,f2); fprintf(out,"->%g\n",fr); fflush(out); fr = 0.0; clear_traces(); av_start_float(a,f_f2,&fr); av_float(a,f1); av_float(a,f2); av_call(a); fprintf(out,"->%g\n",fr); fflush(out); fr = f_f4(f1,f2,f3,f4); fprintf(out,"->%g\n",fr); fflush(out); fr = 0.0; clear_traces(); av_start_float(a,f_f4,&fr); av_float(a,f1); av_float(a,f2); av_float(a,f3); av_float(a,f4); av_call(a); fprintf(out,"->%g\n",fr); fflush(out); fr = f_f8(f1,f2,f3,f4,f5,f6,f7,f8); fprintf(out,"->%g\n",fr); fflush(out); fr = 0.0; clear_traces(); av_start_float(a,f_f8,&fr); av_float(a,f1); av_float(a,f2); av_float(a,f3); av_float(a,f4); av_float(a,f5); av_float(a,f6); av_float(a,f7); av_float(a,f8); av_call(a); fprintf(out,"->%g\n",fr); fflush(out); fr = f_f16(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16); fprintf(out,"->%g\n",fr); fflush(out); fr = 0.0; clear_traces(); av_start_float(a,f_f16,&fr); av_float(a,f1); av_float(a,f2); av_float(a,f3); av_float(a,f4); av_float(a,f5); av_float(a,f6); av_float(a,f7); av_float(a,f8); av_float(a,f9); av_float(a,f10); av_float(a,f11); av_float(a,f12); av_float(a,f13); av_float(a,f14); av_float(a,f15); av_float(a,f16); av_call(a); fprintf(out,"->%g\n",fr); fflush(out); }
void f_d(double d) { f_f(d); }