关于浮点数如何照原样输出,以及浮点数精度对计算结果影响的问题
Logistic映射是混沌学中的例子,指的是如下迭代计算:x[n+1]=k*x[n]*(1-x[n]). 0<k<=4 取x[0]=0.5.对于某些给定的k,这个迭代过程可能收敛到一个点,即x=k*x*(1-x),该点被称为不动点,或者周期为1的点,此时称迭代的周期为1.
对于某些给定的k,这个迭代过程可能在两个点来回跳动,则称迭代的周期为2;依次类推。
【注】从初值起,需要经过一定次数(假定10000次)的迭代计算才能接近周期点。
给定参数,计算Logistic迭代的周期数(周期数小于1024时)或-1(周期数大于或等于1024时)。
输入样例 输出样例
2.95 Case 1: 2.95, 1
3.01 Case 2: 3.01, 2
3.45 Case 3: 3.45, 4
3.564 Case 4: 3.564, 8
3.569945 Case 5: 3.569945, 512
3.569946 Case 6: 3.569946, -1
3.83 Case 7: 3.83, 3
程序代码:#include<stdio.h>
int main()
{
double n,x[1026];
int i=1,j=1;
while(scanf("%lf",&n)==1)
{
j=1;
x[0]=0.5;
printf("Case %d: ",i++);
for(j=1;j<=10000;j++)
x[0]=n*x[0]*(1-x[0]);
for(j=1;j<1026;j++)
{
x[j]=n*x[j-1]*(1.0-x[j-1]);
if(j==1025)
printf("%g, -1\n",n);
else
{
if(fabs(x[j]-x[0])<=1e-10)
{
printf("%g, %d\n",n,j);
break;
}
}
}
}
return 0;
}3.569945,3.569946这两个数字用%g输出都是3.56995,有什么办法让它照原样输出。另外3.569945, 3.569946的结果都是-1,但是3.569945结果应该是512,这跟浮点数的误差有关吗,该怎么修改。还有该怎么减少内存占用,貌似我的程序超过判题系统的限制内存大小。





