免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2556 | 回复: 1
打印 上一主题 下一主题

原来WINDOWS下面的super pi写的很差 [复制链接]

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-10 20:19 |只看该作者 |倒序浏览
不知道是不是为了压CPU的原因。
LINUX下面的这个代码,计算1M PI,在2.5G的ATHLON64上面只要8-9s。牛啊。

  1. /*
  2. * he Gauss AGM algorithm using Schonhage variation. [1] Jorg Arndt,
  3. * Christoph Haenel, "Pi Unleashed", pp. 93, Springer, 2001. (C) 2003
  4. * Hironobu SUZUKI, licensed by GPL2
  5. */
  6. #include <stdio.h>
  7. #include <gmp.h>
  8. #include <time.h>

  9. #define LOG_TEN_TWO  3.32192809488736234789
  10. #define bprec(n) (int)(((n+10)*LOG_TEN_TWO)+2)

  11. int
  12. main(int ac, char *av[])
  13. {
  14.     long int        k,
  15.                     loopmax;
  16.     mpf_t           A,
  17.                     B,
  18.                     a,
  19.                     b,
  20.                     s,
  21.                     s_1,
  22.                     t,
  23.                     t1,
  24.                     t2,
  25.                     t3,
  26.                     c2;
  27.     long int        prec,
  28.                     dprec;
  29.     dprec = 1000000L;           /* decimal precision */
  30.     prec = bprec(dprec);        /* binary precision (plus alpha) */
  31.     mpf_set_default_prec(prec);
  32.     loopmax = 21;

  33.     mpf_init(A);                /* big A */
  34.     mpf_init(B);                /* big B */
  35.     mpf_init(a);                /* a */
  36.     mpf_init(b);                /* b */
  37.     mpf_init(s);                /* s(n) */
  38.     mpf_init(s_1);              /* s(n-1) */
  39.     mpf_init(t);                /* temporary */
  40.     mpf_init(t1);               /* temporary */
  41.     mpf_init(t2);               /* temporary */
  42.     mpf_init(t3);               /* temporary */
  43.     mpf_init(c2);               /* 2 constant */
  44.     mpf_set_ui(A, 1);
  45.     mpf_set_ui(a, 1);
  46.     mpf_set_ui(t1, 1);
  47.     mpf_div_ui(B, t1, 2);
  48.     mpf_div_ui(s, t1, 2);
  49.     mpf_set_ui(t1, 10);
  50.     mpf_set_ui(c2, 2);
  51.     for (k = 1; k <= loopmax; k++) {
  52.         mpf_add(t1, A, B);      /* (A+B) */
  53.         mpf_div_ui(t, t1, 4);   /* t = (A+B)/4 */
  54.         mpf_sqrt(b, B);         /* b = sqrt(B) */
  55.         mpf_add(t1, a, b);      /* (a+b) */
  56.         mpf_div_ui(a, t1, 2);   /* a = (a+b)/2 */
  57.         mpf_mul(A, a, a);       /* A = a * a */
  58.         mpf_sub(t1, A, t);      /* (A-t) */
  59.         mpf_mul_ui(B, t1, 2);   /* B = (A - t) * 2 */
  60.         mpf_sub(t1, B, A);      /* (B-A) */
  61.         mpf_pow_ui(t2, c2, k);  /* 2^k */
  62.         mpf_mul(t3, t1, t2);    /* (B-A) * 2^k */
  63.         mpf_set(s_1, s);
  64.         mpf_add(s, s_1, t3);    /* s = s + (B-A) * 2^k */
  65.     }
  66.     mpf_add(t1, a, b);
  67.     mpf_pow_ui(t2, t1, 2);
  68.     mpf_mul_ui(t1, s, 2);
  69.     mpf_div(A, t2, t1);
  70.     mpf_out_str(stdout, 10, dprec + 10, A);
  71.     exit(0);
  72. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-03-10 20:42 |只看该作者
呵呵,早有人把 GMP 连接到 OpenSSL 的 engine 里去
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP