找回密码
 欢迎注册
楼主: plp626

[讨论] 一个计算圆周率任意精度的spigot算法研究

[复制链接]
发表于 2011-4-24 11:07:50 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-4-24 11:38:11 | 显示全部楼层
11# gracias


恩,后面那个资料我看过,所以才如此感兴趣,只是两年了,对于细节我又忘记了;但大概的思路我还有;

我是要问任意整数开m次方的那个收敛级数,这个问题我已经有了想法,就是如9楼所讨论的

若不限定b=1,更一般的情况就是,解关于正整数a,p,q,非0整数b 的不定方程:
$a*q^m-(a-b)*N*p^m=0$

其中N,m为正整数常数,p,q互质,a,b互质,|b|<a

给定一个不大的正整数N,当n=2,3,4,5,。。。时,上面那个不定方程的解(a,b,p,q)的通项怎么求出,并给出最佳解。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-4-25 06:53:05 | 显示全部楼层
http://user.qzone.qq.com/414353346/blog/1288275811
http://numbers.computation.free. ... grams/tinycodes.pdf

gracias 发表于 2011-4-24 11:07


谢谢你提供的关于这个算法的详细资料,认真看过后有种相见恨晚的感觉;

http://www.comlab.ox.ac.uk/resea ... lgprog-20031107.pdf
http://www.cs.umb.edu/~offner/files/pi.pdf
http://www.mathpropress.com/stan/bibliography/spigot.pdf
http://numbers.computation.free. ... grams/tinycodes.pdf
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-4-25 06:53:48 | 显示全部楼层
言归正传,继续思考这个不定方程的解法。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-25 17:47:22 | 显示全部楼层
5# plp626

谢谢楼主,有时间好好学下批处理。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-26 08:58:43 | 显示全部楼层
本帖最后由 ▄︻┻═┳一‥ 于 2011-4-26 11:27 编辑

当m=2时,也就是开方的时候,用程序暴力搜索1000以内的所有整数解得到:

只是俺的这个程序算法太笨蛋了,运行了半天才得到这些

  1. +------+------+------+------+
  2. |    N |    a |    p |    q |
  3. +------+------+------+------+
  4. |    2 |    9 |    3 |    4 |
  5. |    2 |   50 |    5 |    7 |
  6. |    2 |  289 |   17 |   24 |
  7. |    3 |    4 |    2 |    3 |
  8. |    3 |   49 |    7 |   12 |
  9. |    3 |  676 |   26 |   45 |
  10. |    5 |   81 |    9 |   20 |
  11. |    6 |   25 |    5 |   12 |
  12. |    6 |  243 |    9 |   22 |
  13. |    7 |   64 |    8 |   21 |
  14. |    8 |    9 |    3 |    8 |
  15. |    8 |   50 |    5 |   14 |
  16. |    8 |  289 |   17 |   48 |
  17. |   10 |  361 |   19 |   60 |
  18. |   11 |  100 |   10 |   33 |
  19. |   12 |   49 |    7 |   24 |
  20. |   12 |  676 |   13 |   45 |
  21. |   13 |  325 |    5 |   18 |
  22. |   14 |    8 |    2 |    7 |
  23. |   14 |  225 |   15 |   56 |
  24. |   15 |   16 |    4 |   15 |
  25. |   15 |  961 |   31 |  120 |
  26. |   18 |   50 |    5 |   21 |
  27. |   18 |  289 |   17 |   72 |
  28. |   20 |   81 |    9 |   40 |
  29. |   21 |   28 |    2 |    9 |
  30. |   22 |   99 |    3 |   14 |
  31. |   23 |  576 |   24 |  115 |
  32. |   24 |   25 |    5 |   24 |
  33. |   24 |  243 |    9 |   44 |
  34. |   27 |    4 |    2 |    9 |
  35. |   27 |   49 |    7 |   36 |
  36. |   27 |  676 |   26 |  135 |
  37. |   28 |   64 |    4 |   21 |
  38. |   30 |  121 |   11 |   60 |
  39. |   32 |    9 |    3 |   16 |
  40. |   32 |   50 |    5 |   28 |
  41. |   32 |  289 |   17 |   96 |
  42. |   33 |   12 |    2 |   11 |
  43. |   33 |  529 |   23 |  132 |
  44. |   34 |   18 |    3 |   17 |
  45. |   35 |   36 |    6 |   35 |
  46. |   39 |  625 |   25 |  156 |
  47. |   40 |  361 |   19 |  120 |
  48. |   42 |  169 |   13 |   84 |
  49. |   44 |  100 |    5 |   33 |
  50. |   45 |   81 |    3 |   20 |
  51. |   48 |   49 |    7 |   48 |
  52. |   48 |  676 |   13 |   90 |
  53. |   50 |    9 |    3 |   20 |
  54. |   50 |  289 |   17 |  120 |
  55. |   52 |  325 |    5 |   36 |
  56. |   54 |   25 |    5 |   36 |
  57. |   54 |  243 |    3 |   22 |
  58. |   54 |  755 |  349 |  938 |
  59. |   55 |   45 |    3 |   22 |
  60. |   56 |  225 |   15 |  112 |
  61. |   57 |   76 |    2 |   15 |
  62. |   58 |  887 |  959 |  134 |
  63. |   60 |   16 |    2 |   15 |
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-26 09:28:49 | 显示全部楼层
上面输出表面有些N在1000内还无解

猜想某些N也许在计算机的32位整数内无解。

看来这个级数对于N开m次方不具有通用性。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-26 09:43:19 | 显示全部楼层
// 对于一个给定的浮点数,求一个一定范围内的p/q,使得p/q近似等于这个浮点数,有1种2分迭代法,可迅速逼近,下面给出c语言代码
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>

  4. typedef unsigned long DWORD;

  5. void print_pq(double f,DWORD limit)
  6. {
  7.         DWORD low_p,low_q,high_p,high_q,mid_p,mid_q;
  8.        
  9.         //初始化low_q,low_q,high_p,high_q
  10.         low_q=DWORD(floor(f));
  11.         high_q=DWORD(ceil(f));
  12.         low_p=high_p=1;
  13.        
  14.         mid_p=low_p+high_p;
  15.         mid_q=low_q+high_q;
  16.        
  17.         while ( mid_p<limit )
  18.         {
  19.                 printf("%u/%u=%.12f\n",mid_q,mid_p,double(mid_q)/double(mid_p) );

  20.                 if ( double(mid_q)/double(mid_p) > f)
  21.                 {
  22.                         high_p=mid_p; high_q=mid_q;
  23.                 }
  24.                 else
  25.                 {
  26.                         low_p=mid_p; low_q=mid_q;
  27.                 }
  28.                 mid_p=low_p+high_p;
  29.                 mid_q=low_q+high_q;
  30.         }
  31. }

  32. int main(int argc, char* argv[])
  33. {
  34.         print_pq(sqrt(2),1000000); //求分子在1000000以内的sqrt(2)有理数逼近
  35.         return 0;
  36. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-26 09:44:38 | 显示全部楼层
这里给出楼上代码的运行结果
  1. 3/2=1.500000000000
  2. 4/3=1.333333333333
  3. 7/5=1.400000000000
  4. 10/7=1.428571428571
  5. 17/12=1.416666666667
  6. 24/17=1.411764705882
  7. 41/29=1.413793103448
  8. 58/41=1.414634146341
  9. 99/70=1.414285714286
  10. 140/99=1.414141414141
  11. 239/169=1.414201183432
  12. 338/239=1.414225941423
  13. 577/408=1.414215686275
  14. 816/577=1.414211438475
  15. 1393/985=1.414213197970
  16. 1970/1393=1.414213926777
  17. 3363/2378=1.414213624895
  18. 4756/3363=1.414213499851
  19. 8119/5741=1.414213551646
  20. 11482/8119=1.414213573100
  21. 19601/13860=1.414213564214
  22. 27720/19601=1.414213560533
  23. 47321/33461=1.414213562057
  24. 66922/47321=1.414213562689
  25. 114243/80782=1.414213562427
  26. 161564/114243=1.414213562319
  27. 275807/195025=1.414213562364
  28. 390050/275807=1.414213562382
  29. 665857/470832=1.414213562375
  30. 941664/665857=1.414213562372
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-26 09:48:30 | 显示全部楼层
18# liangbch

你说的可是最佳有理逼近?

那个是连分数,只是当分母超过 21亿的时候,就不好算了,要自己构造大数据类型做除法了。。。。

还是不如spigot算法 省事。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-23 22:08 , Processed in 0.044239 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表