

c言語を用いてテント関数の座標データを生成するコードを作成しています。  
以下はそのコードです。

[code]

    #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;
    }
    
[/code]

このコードを実行するとx座標データとy座標データが表示されるのですが、データが期待する出力として出ません。  
以下はこのコードを実行した時の出力結果の一部です。本来であれば結果の数値は[0,1]になるのですが途中から1を超えてしまいます。関数`tent`のif文は合ってると思うのですが全く別の結果になってしまいます。どなたか原因がわかる方いますか？

[code]

    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
    
[/code]

追記:アドバイスを参考に試してみたところ、

[code]

    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
    
[/code]

となり、本来であれば0.4と0.8を繰り返すのですが、途中から減少してしまい座標データが０に収束してしまいます。


CC BY-SA 4.0
2018-11-12T05:49:11.527
50234
2018-11-12T07:48:17.160
2018-11-12T07:48:17.160
30371
30371
question
c
テント関数の座標データをc言語で作成