博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spigot 算法之中的一个 计算调和级数的和
阅读量:6873 次
发布时间:2019-06-26

本文共 1362 字,大约阅读时间需要 4 分钟。



   我是首先在[1] 注意到 Spigot-Algorithm的,这个算法公布的相当早。见[2].  [1] 给出几个令人惊异的程序。仅仅用非常少的代码就能够计算e,pi,log(2)等常数。

当中那个4行代码计算圆周率的程序被网友称作外星人写的程序。但我一直没有勇气去分析和学习它,近期最终决定学习这个 Spigot-Algorithm,先看了文献【3】。明确了其基本思想。遂计划尝试编写各种计算常数的代码。并写一个系列博客。从这篇開始,我将讲述假设使用这个算法计算各种常数或者级数的和。

    数列a[n]={1/1,1/2,1/3,1/4... 1/n} 被称作调和数列。调和数列的和f(n)= 1/1 + 1/2 + 1/3 +1/4 + ... 1/n 被称作调和级数。调和级数是最简单的级数之中的一个。

用Spigot 算法来计算这个级数也最为简单。

   以下给出代码。

详细说明以后补上。

#define R 10		//进制。可改为100。1000,10000。#define FMT_STR "%d"	//当R=100,1000,10000时。对应的,须要改为"%02d","%03d","%04d",#define N 10		//计算交错级数的前10项#define P 20		//当R=10^k时,可打印前P*k位有效数字int a[N+1],i,j,x;void main(){  for (i=N;i;a[i--]=1);  for (j=0;j

 几点说明:
  1. 数组的长度和计算的项数有关,而和终于精度无关。

  2. a[1] to a[n]存储第j轮计算时。各项的分子。
  3. 每轮计算中。得到2位10进制数。最高位直接输出,次高位缓存在a[0]
  4. 当N大于10时。计算结果错误。这是由于交错级数收敛非常慢. 当得到次高位时就急于输出最高位仍是冒险的方法。

改进的方法是当得到第5位时再输出最高位,然后将第2到5位存储在a[0],以下是改动后的代码,可正确计算交错级数前100项的值。

#define R 10  //进制,可改为100。1000,10000,#define FMT_STR "%d" //当R=100,1000,10000时,对应的,须要改为"%02d","%03d","%04d",#define N 100  //计算交错级数的前N项#define P 100  //当R=10^k时,可打印前P*k位有效数字int a[N+1],i,j,x;void main(){  for (i=N;i;i--)  a[i]=1;  for (j=0;j
2) { printf(FMT_STR,a[0]/(R*R*R*R)); a[0]%=(R*R*R*R); if ( j==3) printf("."); } }}

參考文献:

1. Tiny programs for constants ,

1. M. Abramowitz and I. Stegun, Handbook of Mathematical Functions, Dover, New York, (1964)

3.



转载地址:http://hwpfl.baihongyu.com/

你可能感兴趣的文章
增强现实?先不要指望那些眼镜了
查看>>
《iOS 6核心开发手册(第4版)》——1.10节秘诀:使用多触摸交互
查看>>
《云数据管理:挑战与机遇》一第1章
查看>>
《嵌入式C编程实战》——1.5 软件开发工具
查看>>
分析3000份技术面试数据:这几大指标比你毕业于哪所学校更要紧
查看>>
Linux有问必答:如何检查PDF中使用了哪种字体
查看>>
《Lua游戏AI开发指南》一2.1 新建一个沙箱项目
查看>>
对jquery val 获取input 文本框值进行扩展
查看>>
MySQL (select_paren) union_order_or_limit 行为
查看>>
并发不是并行,它更好!
查看>>
nltk 自己训练模型例子
查看>>
间谍卫星的基础?YOLT——利用卷积神经网络对卫星影像进行多尺度目标检测(Part I)...
查看>>
jstl_开发第一个标签
查看>>
程序员哇,你想在下个情人节或者520脱单么?这个秘籍不能错过
查看>>
去不去O,谁说了算?
查看>>
PHP防SQL注入和XSS攻击
查看>>
在SHAREPOINT共享文档库中启用版本控制功能。
查看>>
Http 代理工具 实战 支持网页与QQ代理
查看>>
又见尾递归
查看>>
安装PyGraphics
查看>>