帰ってきた人生戦闘詳報


madtape.com

2011-12-18

[] #プログラム大喜利 出題その(2) 11:39

Twitter

正攻法で書くとこんな感じか。

/*
	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-brosbig-bros 2011/12/18 12:48 収束判定で手を抜いて「たぶん大丈夫と思われる回数」にしてありますw

ちゃがまちゃがま 2011/12/18 13:52 やべぇ。ポケコンのBASICだと、組み込み関数一発で・・・。

トラックバック - http://d.hatena.ne.jp/big-bros/20111218/1324175959