pi ¿øÁÖÀ²¥ðÀÇ °ªÀ» ´ÙÀÚ¸®¼ö·Î »êÃâÇÑ´Ù
int pi(int *data, int keta);
data (Ãâ·Â) ¿øÁÖÀ²ÀÇ °ªÀÌ 10Áø 4ÀÚ¸®¼ö¾¿ µé¾î°£ Á¤¼öÀÇ ¹è¿ keta (ÀÔ·Â) ¼Ò¼öÁ¡ ÀÌÇÏÀÇ ÀÚ¸®¼öÀÇ ÁöÁ¤
Á¤»óÀûÀ¸·Î °è»êÇÒ ¼ö ÀÖ¾úÀ» ¶§¿¡ 0, ¿¡·¯ ¶§¡ª1.
#define LOG10_5 0.699
#define LOG10_239 2.378
int pi(int *data, int keta)
{
int i;
for (i = 0; i < (keta-1)/4+2; i++) data[i] = 0;
if (series(data, keta, (int)(keta/(2*LOG10_5)+2), 4, 5, 1) ! = 0)
return -1;
if (series(data, keta, (int)(keta/(2*LOG10_239)+2), 1, 239, 0) ! = 0)
return -1;
return 0;
}
int series(int *data, int keta, int maxItem,
unsigned bunsi, unsigned bunpo, unsigned plusMinus)
{
unsigned bunpo2;
unsigned *item, *itemDiv;
unsigned *imp, *ikp;
int *dap;
int len;
int i, j, k;
long x;
len = (keta-1)/4+2 +1;
if ((item = (unsigned *) calloc(len, sizeof(unsigned))) == NULL)
return -1;
for (imp = item, i = len; i--; ) *imp++ = 0;
if ((itemDiv = (unsigned *) calloc(len, sizeof(unsigned))) == NULL) {
free(item);
return -1;
}
*item = bunsi * bunpo * 4;
bunpo2 = bunpo * bunpo;
for (j = 1; maxItem--; j += 2, plusMinus++) {
x = 0;
for (i = len, imp = item; i--; ) {
x = x * 10000 + *imp;
*imp++ = x / bunpo2;
x %= bunpo2;
}
imp = item;
ikp = itemDiv;
if (j == 1) for (i = len; i--; ) *ikp++ = *imp++;
else {
x = 0;
for (i = len; i--; ) {
x = x * 10000 + *imp++;
*ikp++ = x / j;
x %= j;
}
}
k = 0;
dap = data + len;
ikp = itemDiv + len;
if (plusMinus & 1) {
for (i = len; i--; ) {
*--dap += *--ikp + k;
if (*dap < 10000) k = 0;
else {
*dap -= 10000;
k = 1;
}
}
} else {
for (i = len; i--; ) {
*--dap -= *--ikp + k;
if (*dap >= 0) k = 0;
else {
*dap += 10000;
k = 1;
}
}
}
}
free(itemDiv);
free(item);
return 0;
}
¿©±â¼ »ç¿ëÇÏ´Â ½ÄÀº, °¡Àå Àß ¾Ë·ÁÁ® ÀÖ´Â, J. MachinÀÇ ½Ä
¡¡¡¡¡¡¥ð/4 = 4 arctan (1/5) - arctan (1/239)
ÀÌ´Ù. ±×´Â 1706³â¿¡ ÀÌ °ø½Ä¿¡¼¥ð¸¦ ¼Ò¼öÁ¡ ÀÌÇÏ 100ÀÚ¸®¼ö¸¦ ¿ä±¸Çß´Ù.
°°Àº °ø½Ä¿¡¼, 1949³â¿¡´Â ENIAC¿¡ ÀÇÇØ 2037ÀÚ¸®¼ö°¡ ¾à 70½Ã°£À¸·Î, 1958
ÇØ¿¡´Â IBM704¿¡ ÀÇÇØ 1¸¸ ÀÚ¸®¼ö°¡ ¾à 100ºÐ¿¡ ¿ä±¸µÇ°í ÀÖ´Ù.
¿©·¯ºÐÀÌ »ç¿ëÇÏ´Â ÄÄÇ»ÅÍ·Î ¾î´À Á¤µµÀÇ ½Ã°£ ?
µ¡ºÙ¿©¼, ³»°¡ »ç¿ëÇϰí ÀÖ´Â Pentium 120ÀÇ DOS/V¸Ó½Å¿¡¼´Â 1¸¸ ÀÚ¸®¼ö´Â 1ºÐ ¹Ì¸¸À¸·Î °è»êÇÒ ¼ö ÀÖ¾ú´Ù. Çϵå¿þ¾îÀÇ Áøº¸´Â ´ë´ÜÇØ !
¶Ç, PC¿¡¼ÀÇ °è»ê ±â·Ï¿¡ ´ëÇØ¼´Â, ¿ÍÄ«¸¶Ã÷µîÁö ÀÌÃ÷Ű¾¾°¡ 1990³â 2¿ù¿¡, ÈÄÁöÂê FM-TOWNS(¸Þ¸ð¸® 2 MB)¸¦ ÀÌ¿ëÇØ, 184½Ã°£ 45ºÐÀ» °ÉÃĥ𸦠100¸¸ ÀÚ¸®¼ö±îÁö °è»êÇß´Ù.
arctan¸¦¿¡ ÀÇÇÑ °íÀüÀûÀÎ °ø½ÄÀ¸·Î ±× ¹Û¿¡ ÀÌÇÏÀÇ °ÍÀÌ ÀÖ´Ù.
GaussÀÇ °ø½Ä
¡¡¡¡¡¡¥ð/4 = 12 arctan (1/18) + 8 arctan (1/57) - 5 arctan (1/239)
Å©¸®Á¨½Ã¸£³ªÀÇ °ø½Ä
¡¡¡¡¡¡¥ð/4 = 8 arctan (1/10) - arctan (1/239) - 4 arctan (1/515)
½´Å׸£¸¶ÀÇ °ø½Ä
¡¡¡¡¡¡¥ð/4 = 6 arctan (1/8) + 2 arctan (1/57) + arctan (1/239)
Ÿī³ë ŰÄí¿ÀÀÇ °ø½Ä
¡¡¡¡¡¡¥ð/4 = 12 arctan (1/49) + 32 arctan (1/57) - 5 arctan (1/239)
+ 12 arctan (1/110443)
½Ã¹ÙŸ ¾ÆÅ°È÷ÄÚÀÇ °ø½Ä
¡¡¡¡¡¡¥ð/4 = 17 arctan (1/22) + 3 arctan (1/172) - 2 arctan (1/682)
- 7 arctan (1/5357)
½´Å׸£¸¶ÀÇ °ø½ÄÀ¸·Î 8ÀÇ ³ª´°¼ÀÀ» ±Ã¸®ÇÏ¸é °í¼ÓÈ ±â´ëÇÒ ¼ö ÀÖ°í, Ÿī³ëÀÇ °ø½ÄÀ» ÀÌ¿ëÇØ º´·Ä󸮸¦ Çϸé ÁÁÀº ¼ºÀûÀ» ±â´ëÇÒ ¼ö ÀÖÀÚ.
arctan¸¦ »ç¿ëÇÑ °ø½Ä¿¡¼¥ð¸¦ °è»êÇϸé(ÀÚ), ÀÚ¸®¼ö¸¦ 2¹è·Î Çϴµ¥ °è»ê ½Ã°£ (Àº)´Â 4¹èÀÇ Áõ°¡°¡ µÇÁö¸¸, ÀÌÇÏÀÇ ¹æ¹ý¿¡¼´Â 2.1~2.2¹è·Î ³¡³´Ù.
Gauss¡¤¸£Àßµ¹ÀÇ °ø½Ä
¡¡¡¡¡¡A = 1, B = (1/2)1/2, T = 1/4, X = 1
(À¸)·Î¼ A¿Í BÀÇ Â÷À̰¡ ÇÊ¿ä·Î ÇÏ´Â Á¤¹Ðµµº¸´Ù Å« µ¿¾È, ´ÙÀ½ÀÇ °è»êÀ» ¹Ýº¹ÇØ
½ÇÇàÇÑ´Ù.
¡¡¡¡¡¡Y = A, A = (A + B)/2, B = (B * Y)1/2,
¡¡¡¡¡¡T = T - X * (Y-A)2, X = 2 * X
±×·¯ÀÚ(¸é),¥ðÀÇ °ªÀº(A + B)2/(4 * T)°¡ µÈ´Ù. ´Ù¸¸, A, B, T,
YÀÇ °¢ Ä¡´Â, ¿ä±¸ÇÏ·Á°í ÇÏ´Â Á¤¹Ðµµ ÀÌ»óÀ¸·Î °è»êÇØ µÑ Çʿ䰡 ÀÖ´Ù.