challenge 立方根の計算

xは0以上1000未満の実数です。 y * y * y = xになるような実数y(立方根)を小数点以下12桁以上の正確さで 求める関数cube_rootを作って下さい。

ただし、このお題の趣旨は実数区間での探索なので、 立方根関数があっても使ってはいけません。 指数関数と対数関数も禁止します。

Pythonで表現した入出力の例:

>>> cube_root(10.0)
2.1544346900318834
>>> _ ** 3
9.9999999999999947
>>> cube_root(100.0)
4.6415888336127793
>>> _ ** 3
100.00000000000003

Posted feedbacks - C++

gcc version 3.4.2 (mingw-special)で動作確認しました。
終了条件のチェックはこれでいいのかな?
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cmath>

long double cube_root(long double x, long double min = 0.0, long double max = 1000.0)
{
    long double mid = (min + max) / 2.0;
    if((mid == min) || (mid == max))
        return mid;
    return ((std::pow(mid, 3) - x) > 0) ?  cube_root(x, min, mid) : cube_root(x, mid, max);
}

/*
#include <cstdlib>
#include <iomanip>
#include <iostream>

int main(int argc, char * argv[])
{
    long double x = std::atof(argv[1]);
    std::cout << std::setprecision(15) << cube_root(x) << std::endl;
    return EXIT_SUCCESS;
}
*/

Index

Feed

Other

Link

Pathtraq

loading...