首页 新闻 会员 周边 捐助

关于C++求值精度的问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-03-26 10:25
 1 //利用数组来分别存储,精确计算100!的阶乘,这样一个比较大的运算。
 2 #include <iostream>
 3 using namespace std;
 4 int main()
 5 {
 6     cout<<"  ##这个程序是输出100!精确值##  "<<endl;
 7     int sz[30];
 8     sz[0]=1;
 9     for(int j=1;j<30;j++)
10         sz[j]=0;                //初始化数组
11     int i,n=100;
12     double a=1.0;
13     for(int i=1;i<=n;i++)
14         a=a*i;        cout<<"非常不精确的值"<<a<<endl;
15     for(i=n;i>0;i--)
16     {
17         for(int j=0;j<30;j++)
18             {
19             sz[j]=sz[j]*i;
20             if(sz[j]>=10000000)                            //sz[j]存储七位数,多了就向前进位,相当于是一千万进制的运算
21             {
22                 sz[j+1]=sz[j+1]+int(sz[j]/10000000);
23                 sz[j]=sz[j]%10000000;
24             }
25         }
26     }
27     for(int j=29;j>=0;j--)
28     {
29         if(sz[j]==0)
30             cout<<"0000000";
31         else
32             cout<<sz[j];
33     }
34     cout<<endl;
35     return 0;
36 }
View Code

以上是我实现的代码,代码部分可以正确运行,但是感觉误差有点大,算法本身参考了http://zhidao.baidu.com/link?url=kRiMdjRZ7YVoJtWhNMhDcKgVZjseNMJze918Ps2wLvF20R8IyiKO2XAwl1IVcm3CwSupVEsjVivFM0lkWnFLYa

这篇代码,请高手指正这个代码到底是正确还是错误的,或者错在哪里

补充:代码在VS2012上运行无误,可以直接COPY运行,测试我做了n<=11的测试(因为我只会精确求解11!,再大就不会了),都是对的!

问题补充:

如果有关于求解精度方面的指导教程什么的,请不吝发链接,谢谢!

ruirui610的主页 ruirui610 | 初学一级 | 园豆:16
提问于:2013-11-06 20:56
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册