Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
/* floating-point Newton, with inversion in 3M(n) */ #include #include #include #include "gmp.h" #include "gmp-impl.h" #include "longlong.h" #define ZERO (mp_limb_t) 0 #define ONE (mp_limb_t) 1 void mpn_print (mp_ptr A, mp_size_t n) { int j; for (j=0; j #include int cputime () { struct rusage rus; getrusage (0, &rus); return rus.ru_utime.tv_sec * 1000 + rus.ru_utime.tv_usec / 1000; } int main (int argc, char *argv[]) { mp_size_t n = atoi (argv[1]), i, j, k; mp_ptr qp, rp, dp, tp, qp2, rp2; mp_limb_t cy; pid_t pid; int st; k = (argc <= 2) ? 1 : atoi(argv[2]); qp = malloc (n * sizeof (mp_limb_t)); qp2 = malloc (n * sizeof (mp_limb_t)); rp = malloc (n * sizeof (mp_limb_t)); rp2 = malloc (2 * n * sizeof (mp_limb_t)); dp = malloc (n * sizeof (mp_limb_t)); tp = malloc (2 * n * sizeof (mp_limb_t)); pid = getpid (); printf ("Seed=%lu\n", pid); srand48 (pid); for (i = 0; i < n; i++) dp[i] = lrand48 (); dp[n - 1] |= GMP_NUMB_HIGHBIT; st = cputime (); for (i = 0; i < k; i++) { #ifdef CHECK // printf ("Test %lu\n", i); for (j = 0; j < n; j++) dp[j] = lrand48 (); dp[n - 1] |= GMP_NUMB_HIGHBIT; #endif mpn_invert2 (qp, dp, n); #ifdef CHECK if (test_invert2 (qp, dp, n) == 0) { fprintf (stderr, "test_invert2 failed at i=%lu\n", i); printf ("A:="); mpn_print (dp, n); printf ("X:=B^%lu", n); mpn_print (qp, n); exit (1); } #endif } printf ("mpn_invert2 took %dms\n", cputime () - st); // printf ("xp="); mpn_print (qp, n); MPN_ZERO (rp2, 2 * n); rp2[2 * n - 1] = GMP_LIMB_HIGHBIT; st = cputime (); for (i = 0; i < k; i++) { MPN_ZERO (rp2, 2 * n); rp2[2 * n - 1] = GMP_LIMB_HIGHBIT; mpn_divrem (qp2, 0, rp2, 2 * n, dp, n); } printf ("mpn_divrem took %dms\n", cputime () - st); free (qp); free (rp); free (dp); free (tp); return 0; } #endif