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 - Erlang

1> c(cube_root).
{ok,cube_root}
2> io:format("~15.13f~n", [cube_root:cube_root(10.0)]).
2.1544346900319
ok
3> io:format("~15.13f~n", [cube_root:cube_root(100.0)]).
4.6415888336128
ok
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-module(cube_root).
-export([cube_root/1]).

cube_root(Num) -> cube_root(Num, 0.0, 1000.0).
cube_root(Num, Min, Max) ->
    Err = 0.0000000000001,
    Mid = (Min + Max) / 2.0,
    if
        ((Mid - Err) < Min) and (Max < (Mid + Err)) -> Mid;
        ((Mid * Mid * Mid) - Num) > 0 -> cube_root(Num, Min, Mid);
        true -> cube_root(Num, Mid, Max)
    end.

Index

Feed

Other

Link

Pathtraq

loading...