Aseeker 发表于 2019-11-17 20:36:44

c语言 求助

输入x的值( x<0.97),求如下多项式的值,直到|Sn-Sn-1|<0.000001结束
S=1+0.5x+(0.5(0.5-1)/2!)x的2次方+(0.5(0.5-1)(0.5-2)/3!)x的3次方+......+(0.5(0.5-1)(0.5-2)/3!).....(0.5(0.5-1)(0.5-2)......(0.5-n+1)/n!)x的n次方

#include<stdio.h>
#include<math.h>
void main()
{
      int i,j;
      double x,S=1,R=0,k=1,a=1;
      printf("请输入x的值:");
      scanf("%lf",&x);
      if(x<0.97)
                for(i=1,j=1;abs(S-R)>=0.000001;i++)
                {
                        a*=x;
                        j*=i;
                        R=S;
                        S+=(k*(0.5-(i-1))*a)/j;
                        k*=(0.5-(i-1));
                }
      printf("%lf",S);
      system("pause");
}
为什么当x=0.21时,S=1.100000
上面哪里错了

倒戈卸甲 发表于 2019-11-17 21:57:15

本帖最后由 倒戈卸甲 于 2019-11-17 22:04 编辑

当x=0.21时,S=1.100000是正确的,c语言的精度默认只显示6位小数。当然你的代码也有问题,x=0.21时的这个正确只是一个碰巧。abs是整型取绝对值,double应使用fabs

倒戈卸甲 发表于 2019-11-17 22:02:59

你把abs改成fabs,输出也不要用默认的位数,写成printf("%.10lf",S),保留10位小数。话说回来,能把那个数列写成这个算法还是很牛逼的
页: [1]
查看完整版本: c语言 求助