C言語なら俺に聞け(入門篇) Part 25
■ このスレッドは過去ログ倉庫に格納されています
0702デフォルトの名無しさん
2008/03/14(金) 04:42:41これでn=30まで出るが。
--
int main()
{
const long double eps = 3e-19;
long double p = 2 * sqrtl(3);
long double q = 3;
for (int n = 1; p - q > eps; ++n) {
printf("n = %2d: %22.20Lf, %22.20Lf, %22.20Lf\n", n, p, q, (p + q) / 2);
long double r = 1 / p + 1 / q;
p = 2 / r;
q = sqrtl(p * q);
}
printf("%.20Lf\n", p);
return 0;
}
--
sqrtl()のない環境なら、sqrt()の結果を初期値にニュートン法でsqrtl()を実装すればいい。
要は、long doubleで計算するなら平方根も同じ精度が必要と言うことと、
n=100まで求めたいのならそれなりの他倍長演算を実装する必要があるということ。
■ このスレッドは過去ログ倉庫に格納されています