memo369 : WP-1029
Created Fri Oct 29 10:51:01 2010
Last Modified Tue Nov 2 13:48:41 2010
*
#1 Fri Oct 29 10:51:01 2010 / Tue Nov 2 13:48:41 2010
memo370
Forward <= Today => Previous
memo368
*2GBで終了のお知らせ
-rw-rw-r-- 1 nebula nebula 2147483647 10·î 29 10:32 0042.rdf
*
#2 Fri Oct 29 19:25:32 2010 / Sun Oct 31 13:48:31 2010
半径1の円に内接•外接する正2^N角形の面積を用いて円周率を計算する(取り尽くし法)。
半径1の円に内接する正2^N角形の一辺長をL[N]、中心から辺中点までの長さをA[N]とすると、
L[2] = √2
A[2] = 1/√2
L[N]^2 = (L[N-1]/2)^2 + (1-A[N-1])^2
A[N]^2 = 1 - (L[N]/2)^2
また、半径1の円に外接する正2^N角形の一辺長をL[N]、中心から頂点までの長さをA[N]とすると、
L[2] = 2
A[2] = √2
L[N] = L[N-1]/2 - 2*(A[N-1]-1)^2/L[N-1]
A[N]^2 = 1 + (L[N]/2)^2
がそれぞれ成り立つ。
そして定義より、
内接の場合
lim[N→∞] 2^N*L[N]*A[N]/2 = π.
外接の場合は
lim[N→∞] 2^N*L[N]/2 = π.
実装例
-------------
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846264338327950288L
int main(){
long double S = 0;
long double Sn = 0;
long double S2 = 0;
long double Sn2= 0;
int N = 100;
long double L , A ;
long double L2, A2;
L = sqrtl(2.);
A = L / 2;
L2= 2.L;
A2= L2/sqrtl(2);
int i=0;
for(i=2; i<N; ++i){
Sn = L*A/2;
S = Sn * powl(2.L, i);
Sn2 = L2/2;
S2 = Sn2 * powl(2, i);
printf("%2d, " , i );
printf("%1.34Lf, ", S );
printf("%1.34Lf, ", S2);
printf("\n");
L = sqrtl(powl(L/2, 2.L) + powl(1-A, 2.L) );
A = sqrtl(1-powl(L/2, 2.L));
L2 = L2/2 - 2*powl(A2-1, 2.L)/L2;
A2 = sqrtl(1+powl(L2/2, 2.L));
}
}
---------------------------
演習室の環境では30桁あまりの有効数字を確認したが、研究室(xe)の環境では18桁程度に留まった。
精度差の要因はおそらくCPUの違い。演習室のMacはCPUがPowerPC 970(->POWER)で、xeはPentium4(->IA-32).
参考:
[LINK]
出力
---
2, 1.99999999999999999989157978275145, 4.00000000000000000000000000000000,
3, 2.82842712474619009752757614606367, 3.31370849898476039011030458425466,
4, 3.06146745892071817378606024551146, 3.18259787807452811016911686792241,
5, 3.12144515225805228527712620323342, 3.15172490742925609811739273702358,
6, 3.13654849054593926364550848795432, 3.14411838524590426234041340425307,
7, 3.14033115695475291244409543622851, 3.14222362994245684505306703826477,
8, 3.14127725093277286811180304404445, 3.14175036916896645885870220649139,
9, 3.14151380114430107612366604996623, 3.14163208070318180557649323514369,
10, 3.14157294036709138396364082712608, 3.14160251025680894651492813807181,
11, 3.14158772527715970056781669139667, 3.14159511774958905027700650780531,
12, 3.14159142151119997370470326991665, 3.14159326962930731080674007227316,
13, 3.14159234557011774239231038929887, 3.14159280759964457661360948126372,
14, 3.14159257658487266564630024934246, 3.14159269209225437452688567407932,
15, 3.14159263433856298904436887831082, 3.14159266321540841648135566899214,
16, 3.14159264877698566936943536109794, 3.14159265599619702633710227601682,
17, 3.14159265238659134579328469083492, 3.14159265419139418508941152818892,
18, 3.14159265328899276544134810951192, 3.14159265374019347504853938435332,
19, 3.14159265351459312024494374693262, 3.14159265362739329786358200014007,
20, 3.14159265357099320883742243903924, 3.14159265359919325335050221958966,
21, 3.14159265358509323120238254656300, 3.14159265359214324238486260032488,
22, 3.14159265358861823657678213894684, 3.14159265359038073969766280413296,
23, 3.14159265358949948781196181979425, 3.14159265358994011429691339820636,
24, 3.14159265358971980094601739175175, 3.14159265358982995805514626397326,
25, 3.14159265358977487906690095886830, 3.14159265358980241910312469766353,
26, 3.14159265358978864886817239376882, 3.14159265358979553420248898021327,
27, 3.14159265358979209121007003524539, 3.14159265358979381313996037672354,
28, 3.14159265358979295163291411974171, 3.14159265358979338314537876897248,
29, 3.14159265358979316695546557536289, 3.14159265358979327580936369290754,
30, 3.14159265358979322073189333064391, 3.14159265358979324892114981526703,
31, 3.14159265358979323395915983496707, 3.14159265358979324241593678035400,
32, 3.14159265358979323742860678692068, 3.14159265358979324068121330437720,
33, 3.14159265358979323829596852490909, 3.14159265358979324046437286988009,
34, 3.14159265358979323829596852490909, 3.14159265358979324046437286988009,
35, 3.14159265358979323872964939390329, 3.14159265358979324046437286988009,
36, 3.14159265358979323872964939390329, 3.14159265358979324046437286988009,
*
Link to:
*
Linked from:
memo369 : WP-1029
*#1 Fri Oct 29 10:51:01 2010 / Tue Nov 2 13:48:41 2010
memo370 Forward <= Today => Previous memo368
*2GBで終了のお知らせ
-rw-rw-r-- 1 nebula nebula 2147483647 10·î 29 10:32 0042.rdf
*#2 Fri Oct 29 19:25:32 2010 / Sun Oct 31 13:48:31 2010
半径1の円に内接する正2^N角形の一辺長をL[N]、中心から辺中点までの長さをA[N]とすると、
L[2] = √2
A[2] = 1/√2
L[N]^2 = (L[N-1]/2)^2 + (1-A[N-1])^2
A[N]^2 = 1 - (L[N]/2)^2
また、半径1の円に外接する正2^N角形の一辺長をL[N]、中心から頂点までの長さをA[N]とすると、
L[2] = 2
A[2] = √2
L[N] = L[N-1]/2 - 2*(A[N-1]-1)^2/L[N-1]
A[N]^2 = 1 + (L[N]/2)^2
がそれぞれ成り立つ。
そして定義より、
内接の場合
lim[N→∞] 2^N*L[N]*A[N]/2 = π.
外接の場合は
lim[N→∞] 2^N*L[N]/2 = π.
実装例
-------------
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846264338327950288L
int main(){
long double S = 0;
long double Sn = 0;
long double S2 = 0;
long double Sn2= 0;
int N = 100;
long double L , A ;
long double L2, A2;
L = sqrtl(2.);
A = L / 2;
L2= 2.L;
A2= L2/sqrtl(2);
int i=0;
for(i=2; i<N; ++i){
Sn = L*A/2;
S = Sn * powl(2.L, i);
Sn2 = L2/2;
S2 = Sn2 * powl(2, i);
printf("%2d, " , i );
printf("%1.34Lf, ", S );
printf("%1.34Lf, ", S2);
printf("\n");
L = sqrtl(powl(L/2, 2.L) + powl(1-A, 2.L) );
A = sqrtl(1-powl(L/2, 2.L));
L2 = L2/2 - 2*powl(A2-1, 2.L)/L2;
A2 = sqrtl(1+powl(L2/2, 2.L));
}
}
---------------------------
演習室の環境では30桁あまりの有効数字を確認したが、研究室(xe)の環境では18桁程度に留まった。
精度差の要因はおそらくCPUの違い。演習室のMacはCPUがPowerPC 970(->POWER)で、xeはPentium4(->IA-32).
参考:[LINK]
出力
---
2, 1.99999999999999999989157978275145, 4.00000000000000000000000000000000,
3, 2.82842712474619009752757614606367, 3.31370849898476039011030458425466,
4, 3.06146745892071817378606024551146, 3.18259787807452811016911686792241,
5, 3.12144515225805228527712620323342, 3.15172490742925609811739273702358,
6, 3.13654849054593926364550848795432, 3.14411838524590426234041340425307,
7, 3.14033115695475291244409543622851, 3.14222362994245684505306703826477,
8, 3.14127725093277286811180304404445, 3.14175036916896645885870220649139,
9, 3.14151380114430107612366604996623, 3.14163208070318180557649323514369,
10, 3.14157294036709138396364082712608, 3.14160251025680894651492813807181,
11, 3.14158772527715970056781669139667, 3.14159511774958905027700650780531,
12, 3.14159142151119997370470326991665, 3.14159326962930731080674007227316,
13, 3.14159234557011774239231038929887, 3.14159280759964457661360948126372,
14, 3.14159257658487266564630024934246, 3.14159269209225437452688567407932,
15, 3.14159263433856298904436887831082, 3.14159266321540841648135566899214,
16, 3.14159264877698566936943536109794, 3.14159265599619702633710227601682,
17, 3.14159265238659134579328469083492, 3.14159265419139418508941152818892,
18, 3.14159265328899276544134810951192, 3.14159265374019347504853938435332,
19, 3.14159265351459312024494374693262, 3.14159265362739329786358200014007,
20, 3.14159265357099320883742243903924, 3.14159265359919325335050221958966,
21, 3.14159265358509323120238254656300, 3.14159265359214324238486260032488,
22, 3.14159265358861823657678213894684, 3.14159265359038073969766280413296,
23, 3.14159265358949948781196181979425, 3.14159265358994011429691339820636,
24, 3.14159265358971980094601739175175, 3.14159265358982995805514626397326,
25, 3.14159265358977487906690095886830, 3.14159265358980241910312469766353,
26, 3.14159265358978864886817239376882, 3.14159265358979553420248898021327,
27, 3.14159265358979209121007003524539, 3.14159265358979381313996037672354,
28, 3.14159265358979295163291411974171, 3.14159265358979338314537876897248,
29, 3.14159265358979316695546557536289, 3.14159265358979327580936369290754,
30, 3.14159265358979322073189333064391, 3.14159265358979324892114981526703,
31, 3.14159265358979323395915983496707, 3.14159265358979324241593678035400,
32, 3.14159265358979323742860678692068, 3.14159265358979324068121330437720,
33, 3.14159265358979323829596852490909, 3.14159265358979324046437286988009,
34, 3.14159265358979323829596852490909, 3.14159265358979324046437286988009,
35, 3.14159265358979323872964939390329, 3.14159265358979324046437286988009,
36, 3.14159265358979323872964939390329, 3.14159265358979324046437286988009,
*Link to: