[ create a new paste ] login | about

Link: http://codepad.org/Wtgf7r1r    [ raw code | output | fork ]

C, pasted on May 20:
#include <stdio.h>                                                                      



// ここに、計算したい式を書く
static double _calc(double a)
{                            
        return ((20 * a) + (a * a));
}                                   



static double calc(double target)
{                                
        double a=1;              
        double old_a=0;          

        double ans=0;
        while (1){   
                ans = _calc(a);
                if (ans > target) {
                        break;     
                }                  

                old_a = a;
                a *= 2;   
        }                 



        double la,ha;
        ha = a;      
        la = old_a;  

        double add;

        while (1) {
                printf("答えは[%.8lf]よりも小さくて, [%.8lf]よりも大きい数のはず。今は[%.8lf]\n",ha,la,a);
                ans = _calc(a);                                                                           

                // 答えとの差が 10 * (0.1 * 0.1 * 0.1 * 0.1 * 0.1 * 0.1) よりも少なくなったら、答えと考える
                if ((ans < target) && ((target - ans) < 1e-6)) {                                           
                        return (a);                                                                        
                }                                                                                          



                // 上限と、下限の、範囲をすこしずつ狭めながら、
                // a に、上限と下限の真ん中の数字をセットしていく

                // もしも答えが大きければ、
                if (ans > target) {
                        // もしも上限が a よりも大きければ、新しい上限を a にする
                        if (ha > a) {
                                ha = a;
                        }

                        // a に、上限と下限の、真ん中の数字をセット
                        add = (ha - la) / 2;
                        a -= add;
                }
                // もしも答えが小さければ、
                else if (ans < target) {
                        // もしも上限が a よりも小さければ、新しい上限を a にする。
                        if (la < a) {
                                la = a;
                        }

                        // a に、上限と下限の、真ん中の数字をセット
                        add = (ha - la) / 2;
                        a += add;
                }


                getchar(); // キー入力があるまで止まる
        }
}

void main()
{
        printf("答え:[%.8lf]\n",calc(200));
}


Output:
答えは[8.00000000]よりも小さくて, [4.00000000]よりも大きい数のはず。今は[8.00000000]
答えは[8.00000000]よりも小さくて, [4.00000000]よりも大きい数のはず。今は[6.00000000]
答えは[8.00000000]よりも小さくて, [6.00000000]よりも大きい数のはず。今は[7.00000000]
答えは[8.00000000]よりも小さくて, [7.00000000]よりも大きい数のはず。今は[7.50000000]
答えは[7.50000000]よりも小さくて, [7.00000000]よりも大きい数のはず。今は[7.25000000]
答えは[7.50000000]よりも小さくて, [7.25000000]よりも大きい数のはず。今は[7.37500000]
答えは[7.37500000]よりも小さくて, [7.25000000]よりも大きい数のはず。今は[7.31250000]
答えは[7.37500000]よりも小さくて, [7.31250000]よりも大きい数のはず。今は[7.34375000]
答えは[7.34375000]よりも小さくて, [7.31250000]よりも大きい数のはず。今は[7.32812500]
答えは[7.32812500]よりも小さくて, [7.31250000]よりも大きい数のはず。今は[7.32031250]
答えは[7.32812500]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32421875]
答えは[7.32421875]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32226562]
答えは[7.32226562]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32128906]
答えは[7.32128906]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32080078]
答えは[7.32080078]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32055664]
答えは[7.32055664]よりも小さくて, [7.32031250]よりも大きい数のはず。今は[7.32043457]
答えは[7.32055664]よりも小さくて, [7.32043457]よりも大きい数のはず。今は[7.32049561]
答えは[7.32055664]よりも小さくて, [7.32049561]よりも大きい数のはず。今は[7.32052612]
答えは[7.32052612]よりも小さくて, [7.32049561]よりも大きい数のはず。今は[7.32051086]
答えは[7.32051086]よりも小さくて, [7.32049561]よりも大きい数のはず。今は[7.32050323]
答えは[7.32051086]よりも小さくて, [7.32050323]よりも大きい数のはず。今は[7.32050705]
答えは[7.32051086]よりも小さくて, [7.32050705]よりも大きい数のはず。今は[7.32050896]
答えは[7.32050896]よりも小さくて, [7.32050705]よりも大きい数のはず。今は[7.32050800]
答えは[7.32050896]よりも小さくて, [7.32050800]よりも大きい数のはず。今は[7.32050848]
答えは[7.32050848]よりも小さくて, [7.32050800]よりも大きい数のはず。今は[7.32050824]
答えは[7.32050824]よりも小さくて, [7.32050800]よりも大きい数のはず。今は[7.32050812]
答えは[7.32050812]よりも小さくて, [7.32050800]よりも大きい数のはず。今は[7.32050806]
答え:[7.32050806]


Create a new paste based on this one


Comments: