f(x)=sqrt(x+1)とおくと、
[album]554[/album]
という式で√2が求められそうだとわかった。
そこで、実際にプログラムを組んでみる。
#include
#include
int main(void) {
double ans,now;
int i;
ans=1;now=1.0/2.0;
for(i=1;i
#include
int main(void) {
double ans,now;
int i;
ans=1;now=1.0/2.0;
for(i=1;i=10000-5) {
printf("%5d %.15f %.15f\n",i,ans,now);
} else if(i==11)puts("中略");
now*=-(2*i-1);
now/=2*i+2;
}
printf("sqrt(2)=%.15f\n",sqrt(2));
return 0;
}
1 1.500000000000000 0.500000000000000
2 1.375000000000000 -0.125000000000000
3 1.437500000000000 0.062500000000000
4 1.398437500000000 -0.039062500000000
5 1.425781250000000 0.027343750000000
6 1.405273437500000 -0.020507812500000
7 1.421386718750000 0.016113281250000
8 1.408294677734375 -0.013092041015625
9 1.419204711914062 0.010910034179688
10 1.409931182861328 -0.009273529052734
中略
9995 1.414213703521030 0.000000282317088
9996 1.414213421246307 -0.000000282274723
9997 1.414213703478676 0.000000282232369
9998 1.414213421288650 -0.000000282190026
9999 1.414213703436343 0.000000282147693
10000 1.414213421330972 -0.000000282105371
sqrt(2)=1.414213562373095
もう少し効率よく求まらないだろうか。
さっきのf(x)に、x=-1/2を代入してみると、f(x)=1/sqrt(2)となるので、これに2を掛ければ√2が得られる。
この時、 となる。
実際にやってみた。
#include
#include
int main(void) {
double ans,now;
int i;
ans=1;now=1.0/4.0;
for(i=1;i
#include
int main(void) {
double ans,now;
int i;
ans=1;now=1.0/100.0;
for(i=1;i
#include
int main(void) {
double ans,now;
int i;
ans=1;now=1.0/65918162.0/2.0;
for(i=1;i<=100;i++) {
ans-=now;
printf("%3d %.15f %.15f\n",i,ans*2.0*5741.0/8119.0,now);
now*=2*i-1;
now/=65918162.0*(2*i+2);
}
printf("sqrt(2)=%.15f\n",sqrt(2));
return 0;
}
1 1.414213562373095 0.000000007585163
2 1.414213562373095 0.000000000000000
3 1.414213562373095 0.000000000000000
4 1.414213562373095 0.000000000000000
5 1.414213562373095 0.000000000000000
中略
100 1.414213562373095 0.000000000000000
sqrt(2)=1.414213562373095
この数字を用いて多倍長計算したところ、100万桁の√2の値を、自分の環境で12分15秒で求められた。
円周率計算で約13万桁に4分20秒かかったことを考えると、比較的速いと言えるのではないか。
そんなことはない
多倍長電卓LMを用いて√2を100万桁計算してみる。
設定から10進桁数を1000010桁にして、sqrt(2)[Enter]
応答なし
ズラーッ
気になるタイムは・・・
23秒
は・・・速い・・・
[album]555[/album]