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

ニュートン法で。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import std.stdio;
import std.math;

real cube_root(real x){
    real y0 = 3;
    while(true){
        real y1 = (2 * y0 + x / (y0 * y0)) / 3;
        if(abs(y1 - y0) < 1e-14) return y1;
        y0 = y1;
    }
}

void main(){
    foreach(r; [cube_root(10.0), cube_root(100.0)]){
        writefln("%.13f ^ 3 = %.13f", r, pow(r, 3));
          //=> 2.1544346900319 ^ 3 = 10.0000000000000
          //=> 4.6415888336128 ^ 3 = 100.0000000000000
    }
}

Index

Feed

Other

Link

Pathtraq

loading...