/*
    C/C++の宿題片付けます 161代目
    http://t...content-available-to-author-only...h.net/test/read.cgi/tech/1354070278/
        125 名前：デフォルトの名無しさん [sage]： 2012/12/06(木) 10:12:21.78  
        [1] 授業単元：c言語 関数＆配列
        [2] 問題文　関数配列の問題です。
        ｈｔｔｐ：//www.dotup.org/uploda/www.dotup.org3703015.pdf
        [3] 環境 
        　[3.1] OS： Linux 
        　[3.2] コンパイラ名とバージョン： gcc 
        　[3.3] 言語： C 
        [4] 期限:12/11 
        ポインターは使わずによろしくお願いいたします 
    1. 与えられた数xの3乗根を返す関数cube_root(x)とこれを呼び出して1から10までの3乗根の値を表示する
       プログラムを作成せよ。
*/
#include<stdio.h>

double cube_root(double d)
{
    double dmin = 1.0;
    double dmax = d;
    double tmp, sanjo;

    while (1) {
        // 中間値
        tmp = (dmin + dmax) / 2.0;
        // tmp が dmax, dmin どちらかにくっついてしまったら、計算はここまで
        if (tmp == dmin || tmp == dmax) {
            break;
        }
        // 実際に3乗したのを判定して狭める
        sanjo = tmp * tmp * tmp;
        if (sanjo < d) {
            dmin = tmp;
        } else if (sanjo > d) {
            dmax = tmp;
        } else {
            break;              // ジャスト
        }
    }
    return tmp;
}

int main()
{
    double a;
    for (a = 1.0; a <= 10.0; a += 1.0) {
        printf("%2.0fの3乗根 = %.10f\n", a, cube_root(a));
    }
    return 0;
}