关于浮点数如何照原样输出,以及浮点数精度对计算结果影响的问题
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,这跟浮点数的误差有关吗,该怎么修改。还有该怎么减少内存占用,貌似我的程序超过判题系统的限制内存大小。