
2011-12-18
■[COM] #プログラム大喜利 出題その(2)
正攻法で書くとこんな感じか。
/* my_cbrt.c */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define CONV_REPEAT 30 double my_cbrt(int N) { double x = N; int i; for(i = 0; i < CONV_REPEAT; i++) { x = sqrt(sqrt((double)N * x)); } return x; } int main(int argc, char **argv) { int n = atoi(argv[1]); /* コマンドライン引数から任意の数を得る流れは手抜き */ double x = my_cbrt(n); printf("cbrt(%d) = %f (^3 = %f)\n", n, x, x * x * x); return EXIT_SUCCESS; }
コメントを書く
朝日薫
2011/12/18 12:44
例えば8を与えた場合でも30回ループしちゃうのは哀しいかも…
big-bros
2011/12/18 12:48
収束判定で手を抜いて「たぶん大丈夫と思われる回数」にしてありますw
ちゃがま
2011/12/18 13:52
やべぇ。ポケコンのBASICだと、組み込み関数一発で・・・。
トラックバック - http://d.hatena.ne.jp/big-bros/20111218/1324175959

