| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1856 人关注过本帖
标题:[求助]数据类型
只看楼主 加入收藏
且听雪
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-1-13
收藏
 问题点数:0 回复次数:6 
[求助]数据类型
我要这样一个数据 类型来储存圆周率pi, 精确噢!帮忙看一个程序。
#include<math.h>
typedef struct {
?????
}abc;

main()
{
abc pi;
int n;
scanf("%d",&n);
pi=n*sin(360/n);
printf("%??",pi);
getch();
}
其中??为不懂之处.指教,指教.!!!
使圆周率pi 为定义的一种类型,能够储存小数点后100位小数。Undrestand???
搜索更多相关主题的帖子: 圆周率 类型 数据 小数 abc 
2005-03-24 09:22
vic
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-3-21
收藏
得分:0 
请查阅你的系统的<include/limits.h>中long / double long 的最大定义, 如果用: n*sin(360/n) 两个long型死活也算不出100位的数.所以你的算法就不对了.(当然,不考虑算法问题,pi 可以定义为 char *pi) 参看:

圆周率的计算方法

  古人计算圆周率,一般是用割圆法。即用圆的内接或外切正多边形来逼近圆的周长。Archimedes用正96边形得到圆周率小数点后3位的精度;刘徽用正3072边形得到5位精度;Ludolph Van Ceulen用正262边形得到了35位精度。这种基于几何的算法计算量大,速度慢,吃力不讨好。随着数学的发展,数学家们在进行数学研究时有意无意地发现了许多计算圆周率的公式。下面挑选一些经典的常用公式加以介绍。除了这些经典公式外,还有很多其他公式和由这些经典公式衍生出来的公式,就不一一列举了。    
  • Machin公式
这个公式由英国天文学教授JohnMachin于1706年发现。他利用这个公式计算到了100位的圆周率。Machin公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数,所以可以很容易地在计算机上编程实现。 Machin.c 源程序 还有很多类似于Machin公式的反正切公式。在所有这些公式中,Machin公式似乎是最快的了。虽然如此,如果要计算更多的位数,比如几千万位,Machin公式就力不从心了。下面介绍的算法,在PC机上计算大约一天时间,就可以得到圆周率的过亿位的精度。这些算法用程序实现起来比较复杂。因为计算过程中涉及两个大数的乘除运算,要用FFT(Fast Fourier Transform)算法。FFT可以将两个大数的乘除运算时间由O(n2)缩短为O(nlog(n))。 关于FFT算法的具体实现和源程序,请参考Xavier Gourdon的主页  
  • Ramanujan公式
1914年,印度数学家Srinivasa Ramanujan在他的论文里发表了一系列共14条圆周率的计算公式,这是其中之一。这个公式每计算一项可以得到8位的十进制精度。1985年Gosper用这个公式计算到了圆周率的17,500,000位。 1989年,David & Gregory Chudnovsky兄弟将Ramanujan公式改良成为: 这个公式被称为Chudnovsky公式,每计算一项可以得到15位的十进制精度。1994年Chudnovsky兄弟利用这个公式计算到了4,044,000,000位。Chudnovsky公式的另一个更方便于计算机编程的形式是:    
  • AGM(Arithmetic-Geometric Mean)算法
Gauss-Legendre公式: 初值: 重复计算: 最后计算: 这个公式每迭代一次将得到双倍的十进制精度,比如要计算100万位,迭代20次就够了。1999年9月Takahashi和Kanada用这个算法计算到了圆周率的206,158,430,000位,创出新的世界纪录。 Borwein四次迭代式: 初值: 重复计算: 最后计算: 这个公式由Jonathan Borwein和Peter Borwein于1985年发表,它四次收敛于圆周率。    
  • Bailey-Borwein-Plouffe算法
这个公式简称BBP公式,由David Bailey, Peter Borwein和Simon Plouffe于1995年共同发表。它打破了传统的圆周率的算法,可以计算圆周率的任意第n位,而不用计算前面的n-1位。这为圆周率的分布式计算提供了可行性。1997年,Fabrice Bellard找到了一个比BBP快40%的公式:
2005-03-24 17:21
zjia
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-3-17
收藏
得分:0 
佩服!

2005-03-25 21:01
且听雪
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-1-13
收藏
得分:0 
Thank you very much!!!
看得我都头晕了.确实厉害!@!
只是说了这么多算法,怎么在程序中实现?这么精确的数据如何存储?double型数据也只有8个字节而已.
拜托还有一个问题/
三角函数的算法是怎样的?
TC中三角函数的实参是弧度,如果是角度又如何?
我那源代码中pi=n*sin(360/n); 应该错了。算法应该可以吧?
2005-03-25 21:12
shanji
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2005-1-23
收藏
得分:0 
2005-04-14 15:06
lijunhua
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-17
收藏
得分:0 
不错啊!
2005-04-19 23:54
老顽童989
Rank: 2
来 自:湖北武汉
等 级:论坛游民
威 望:1
帖 子:56
专家分:20
注 册:2011-5-19
收藏
得分:0 
我的原创奉献 ---------

             计算圆周率到任意位

         计算公式: 圆周率 = 180 * 10^n * Sin(10^ -n)

                  其中:n 为 1,2,3,4,5 ....... n

                            Sin() 使用的是角度 不是弧度

                                        可以计算到 小数点后 2 * n +3 位

                     用Windows 所带的计算器可以计算到小数点后31位(N=14)

我喜欢编程
2015-08-08 10:58
快速回复:[求助]数据类型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080790 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved