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ÀÇ °¢ Ä¡´Â, ¿ä±¸ÇÏ·Á°í ÇÏ´Â Á¤¹Ðµµ ÀÌ»óÀ¸·Î °è»êÇØ µÑ ÇÊ¿ä°¡ ÀÖ´Ù.