计算椭圆周长〔精度很高〕.docVIP

  • 4
  • 0
  • 约 4页
  • 2017-08-20 发布于北京
  • 举报
UVA - 12475 :求椭圆的周长,精度要求很高 暑期电大组队训练赛的一题。 题意是给出椭圆的长半轴a和b,求椭圆的周长,精度要求很高! ? 关于椭圆周长(L)的精确计算要用到积分或无穷级数的求和. //显然直接利用积分计算太困难,而利用被转化过来的级数计算则显然方便的多。只是循环到多大级数才算最好。我参照一篇论文(但依据论文写的程序很多小数据并不能过)提供的数据 ??? ? 公式(8)C值 ? 椭圆周长真值 ??? 误差率 ?? 100 ?? 000 400? 400?0.0000000000 ?? 100 ?? 001 400? 400?0.0000000003 ?? 100 ?? 010 ? 406? 406?0.000000001 ?? 100 ?? 025 ? 428? 428?0.000000002 ?? 100 ?? 050 ? 484? 484?0.000000001 ?? 100 ?? 075 ? 552? 552?0.0000000003 ?? 100 ?? 090 ? 597? 597?0.000000005 ?? 100 ?? 099 ? 625? 625?0.0000000001 ?? 100 ?? 100 ? 628? 628?0.0000000000 将级数定在10^5的时候,精度已经满足要求了。 [cpp] view plaincopy #includeiostream?? #includecstdio?? #includecstring?? #includestring?? #includecmath?? #includealgorithm?? using?namespace?std;?? const?double?pi=acos(-1.0);?? ?? int?main()?? {?? ????int?T,i,j;?? ????scanf(%d,T);?? ????for(j=1;j=T;j++)?? ????{?? ????????double?a,b,L;?? ????????scanf(%lf%lf,b,a);?? ????????L=2.0*pi*a;?? ????????double?e=1.0-b*b/a/a,sum=1.0,tmp=1.0,r;??//这里的e保存的其实是表达式中e的平方?? ????????for(i=1;i=100000;i++)?? ????????{?? ????????????r=(2.0*i-1.0)/(2.0*i);?? ????????????tmp*=r*r*e;?? ????????????sum-=tmp/(2.0*i-1.0);??? ????????}?? ????????printf(Case?%d:?%.8lf\n,j,L*sum);?? ????}?? ????return?0;?? }?? 也有电大牛队不知道到用什么方法0ms快速AC。先复制代码如下参考! [cpp] view plaincopy #includemap?? #includeset?? #includequeue?? #includecmath?? #includecstdio?? #includevector?? #includestring?? #includecstring?? #includecstdlib?? #includeiostream?? #includealgorithm?? using?namespace?std;?? #define?lowbit(x)?(x(-x))?? #define?Max(a,b)?ab?a:b?? #define?Min(a,b)?ab?a:b?? #define?INF?0x7fffffff?? #define?LLINF?922337203685477600LL?? #define?LL?__int64?? #define?MAXN?60000?? #define?MAXE?1100000?? #define?CH?129?? #define?eps?1e-8?? #define?PI?acos(-1.0)?? #define?mod?10000?? #define?lson?l?,?m?,?rt??1?? #define?r

文档评论(0)

1亿VIP精品文档

相关文档