テント関数の座標データをc言語で作成
c言語を用いてテント関数の座標データを生成するコードを作成しています。
以下はそのコードです。
#include<stdio.h>
#define N 100
double tent(double x){
if(0<=x<=0.5){
return 2*x;
}
if(0.5<x<=1){
return 2*(1-x);
}
}
int main(void){
int n;
double x[101];
x[0]=0.7;
for(n=0;n<=N;n++){
x[n+1] = tent(x[n]);
printf("%lf %lf\n",x[n],x[n+1]);
}
return 0;
}
このコードを実行するとx座標データとy座標データが表示されるのですが、データが期待する出力として出ません。
以下はこのコードを実行した時の出力結果の一部です。本来であれば結果の数値は[0,1]になるのですが途中から1を超えてしまいます。関数tent
のif文は合ってると思うのですが全く別の結果になってしまいます。どなたか原因がわかる方いますか?
0.700000 0.600000
0.600000 0.800000
0.800000 0.400000
0.400000 1.200000
1.200000 -0.400000
-0.400000 -0.800000
-0.800000 -1.600000
-1.600000 -3.200000
-3.200000 -6.400000
-6.400000 -12.800000
-12.800000 -25.600000
-25.600000 -51.200000
追記:アドバイスを参考に試してみたところ、
0.400000 0.800000
0.800000 0.400000
0.400000 0.799999
0.799999 0.400002
0.400002 0.800003
0.800003 0.399994
0.399994 0.799988
0.799988 0.400024
0.400024 0.800049
0.800049 0.399902
0.399902 0.799805
となり、本来であれば0.4と0.8を繰り返すのですが、途中から減少してしまい座標データが0に収束してしまいます。