Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349065
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:56

#include

void main( )

{

    double x=0, z=2;

    int a=0, b=1;

    while(z>1e-15)

    {

        x+=z;

        a++;

        b+=2;

        z=z*a/b;

        }

    cout.precision(15);//设置浮点数输出时的有效位数为15位

    cout<<"Pi="<
}

 

l         计算结果为:

Pi=3.14159265358979(14位)
使用double型的精度很低,只能计算到小数点后14位。所以我们需要把上面的程序改造一下,让它精确到小数点后面1000位,怎么办呢?我们可以定义一个字符数组来存放十进制数的每一位,如下:

    const int ARRSIZE=1010, DISPCNT=1002;//定义数组大小,显示位数

    static char x[ARRSIZE], z[ARRSIZE];//x[0],x[1],x[2],x[3]...x[ARRSIZE-1]

其中小数点定位在数组X[1]和X[2]之间,即小数点前面是2位整数(X[0]和X[1]),从X[2]开始都是小数位。并利用计算机来模拟四则运算的笔算方法来实现高精度的数据计算。
在程序中还要计算出所用的时间(毫秒级)。

提示:利用timeGetTime()函数,这个函数返回一个DWORD(双字)的毫秒数据,编译时,加上头文件windows.h,在project->settings->link->Object/library modules中加上winmm.lib。可以通过两次返回的差值计算出所用的计算时间(毫秒数)。

请教一下怎么做啊,谢谢了




--------------------next---------------------

阅读(2041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~