ÀÌ ±ÛÀº Á¶¸¸°£ ÃâÆÇµÉ Game Programming Gems 2 Çѱ¹¾îÆÇ(·ù±¤ ¿ª, Á¤º¸¹®È­»ç)ÀÇ ÀϺÎÀÔ´Ï´Ù. ÀÌ ±Û¿¡ ´ëÇÑ ¸ðµç ±Ç¸®´Â Á¤º¸¹®È­»ç°¡ °¡Áö°í ÀÖÀ¸¸ç, »çÀü Çã¶ô ¾øÀÌ´Â À¥ »çÀÌÆ® °Ô½Ã¸¦ ºñ·ÔÇÑ ¾î¶°ÇÑ ÇüÅÂÀÇ Àç¹èÆ÷µµ ±ÝÁöµÇ¾î ÀÖ½À´Ï´Ù.

ÀÌ ±ÛÀº ÃÖÁ¾ ±³Á¤ ÀüÀÇ »óÅÂÀ̹ǷΠ¿ÀŸ³ª ¿À¿ªÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ À¥ ÆäÀÌÁöÀÇ ÇÑ°è »ó, ½ÇÁ¦·Î Á¾ÀÌ¿¡ ÀμâµÈ ÇüÅ¿ʹ ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù.

Game Programming Gem 2 Çѱ¹¾îÆÇ¿¡ ´ëÇÑ Á¤º¸´Â GPG ½ºÅ͵ð(http://www.gpgstudy.com/)¿¡¼­ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

2.1 ºÎµ¿¼Ò¼öÁ¡ ºñ¹ýµé: IEEE ºÎµ¿¼Ò¼öÁ¡À» ÅëÇÑ ¼º´É Çâ»ó

Yossarian King, Electronic Arts Canada
yking(at)ea.com

°³¿ä

Á¤¼ö(integer, ïÚâ¦)´Â °íÁ¤µÈ Á¤¹Ðµµ(precision, À¯È¿ÀÚ¸®¼ö)¿Í Å©±â(magnitude)¸¦ °¡Áø´Ù. ºÎµ¿¼Ò¼öÁ¡(floating-point, Ý©ÔÑá³â¦ïÇ) ¼ö´Â ¸» ±×´ë·Î ¼Ò¼öÁ¡(decimal point)ÀÇ À§Ä¡°¡ ¶°´Ù´Ï´Â(floating, ºÎµ¿) ¼ö¸¦ ¸»Çϸç, Å©±âµµ °¡º¯ÀûÀÌ´Ù. ¿ª»çÀûÀ¸·Î, Á¤¼ö´Â ºü¸£°í ºÎµ¿¼Ò¼öÁ¡¼ö´Â ´À·ÈÀ¸¹Ç·Î, ´ëºÎºÐÀÇ °ÔÀÓ ÇÁ·Î±×·¡¸ÓµéÀº ºÎµ¿¼Ò¼öÁ¡¼ö¸¦ ÇÇÇÏ°í ´ë½Å Á¤¼ö¸¦ »ç¿ëÇߴµ¥, »ç½Ç ÀϹÝÀûÀÎ °è»êÀ» Á¤¼ö·Î¸¸ ¼öÇàÇÏ´Â °ÍÀº ¹ø°Å·Î¿î ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø¾ú´Ù. ±×·¡µµ ¾òÀ» ¼ö ÀÖ´Â À̵æÀº ¸¹¾Ò´Ù. ±×·¯³ª Çϵå¿þ¾î ºñ¿ëÀÌ ´ë´ÜÈ÷ ³·¾ÆÁö°í, PC¿Í °ÔÀÓ ÄֵܼéÀÌ ºÎµ¿¼Ò¼öÁ¡ µ¡¼À, »¬¼À, °ö¼À, ³ª´°¼ÀÀ» ´Ü ¸î »çÀÌŬ ¸¸¿¡ ó¸®ÇÏ°Ô µÊ¿¡ µû¶ó, ÀÌÁ¦´Â °ÔÀÓ ÇÁ·Î±×·¡¸ÓµéÀÌ ¼Õ½¬¿î ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀÇ ÀåÁ¡À» ÃëÇÒ ¼ö ÀÖ´Â ½ÃÀýÀÌ µµ·¡ÇÏ°Ô µÇ¾ú´Ù.

±âº»ÀûÀÎ ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀÌ »¡¶óÁö±ä ÇßÁö¸¸, º¹ÀâÇÑ ÇÔ¼öµéÀº ¿©ÀüÈ÷ ´À¸®´Ù. ºÎµ¿¼Ò¼öÁ¡ ¶óÀ̺귯¸®µéÀÌ ´õ ÃÖÀûÈ­µÉ ¼öµµ ÀÖÀ¸³ª, ±×·± ¶óÀ̺귯¸®µéÀº ÀϹÝÀûÀ¸·Î ¼º´ÉÀÌ ¾Æ´Ñ Á¤È®¼ºÀ» À§ÇØ ±¸ÇöµÈ °ÍµéÀÌ´Ù. °ÔÀÓ¿¡¼­´Â Á¤È®¼ºº¸´Ù ¼º´ÉÀÌ ´õ Áß¿äÇÑ °æ¿ì°¡ ¸¹´Ù.

ÀÌ ±ÛÀº Á¤È®¼ºÀ» Èñ»ýÇÔÀ¸·Î½á ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê ¼Óµµ¸¦ ºü¸£°Ô ÇÏ´Â ¿©·¯ °¡Áö ºñ¹ýµéÀ» Á¦½ÃÇÑ´Ù. Á¤¼ö ¿¬»ê¿¡´Â ¿À·§µ¿¾È Å×À̺í ÂüÁ¶ ±â¹ýÀÌ Áñ°Ü ¾²¿´´Ù. ÀÌ ±Û¿¡¼­´Â ÀÓÀÇÀÇ ºÎµ¿¼Ò¼öÁ¡ ÇÔ¼öÀÇ ÃÖÀûÈ­¸¦ À§ÇÑ ÀϹÝÈ­µÈ ¼±Çü ¹× ´ë¼öÀû(logarithmic, Óßâ¦îÜ) ÂüÁ¶ Å×ÀÌºí ±â¹ýµéÀ» ¼Ò°³ÇÑ´Ù.

ÀÌ ±Û¿¡¼­ À̾߱âÇÏ´Â ÁÖÁ¦µéÀº ´ÙÀ½°ú °°´Ù.

IEEE ºÎµ¿¼Ò¼öÁ¡ Çü½Ä

ºÎµ¿¼Ò¼öÁ¡ ¼ö¿¡ ´ëÇÑ IEEE Ç¥ÁØ¿¡´Â ºÎµ¿¼Ò¼öÁ¡ÀÇ ÀÌÁø(binary) Ç¥Çö°ú ¹Ý¿Ã¸², Á¤È®¼º, ¿¹¿ÜÀû °á°ú(0À¸·Î ³ª´©±â µî)¿¡ ´ëÇÑ ±Ô¾àµéÀÌ ¸í½ÃµÇ¾î ÀÖ´Ù. ÀÌ ±Û¿¡¼­ ´Ù·ç´Â ±â¹ýÀº ÀÌÁø Ç¥Çö¿¡ ±Ù°ÅÇÑ °ÍÀ̸ç, ¹Ý¿Ã¸²À̳ª ¿¹¿Ü 󸮿ʹ ū °ü·ÃÀÌ ¾ø´Ù. IEEEÀÇ Ç¥ÁØ ÀÌÁø Ç¥ÇöÀ» »ç¿ëÇÏ´Â ÄÄÇ»Åͳª ÄܼÖÀ̶ó¸é ºÎµ¿¼Ò¼öÁ¡ 󸮿¡ ´ëÇÑ IEEE Ç¥ÁØÀ» ¿ÏÀüÈ÷ ¸¸Á·ÇÏÁö ¾Ê´Â´Ù ÇØµµ ÀÌ ±ÛÀÇ ±â¹ýµéÀ» Àû¿ëÇÒ ¼ö ÀÖ´Ù. ÆæÆ¼¾ö III Streaming SIMD Extensions(SSE)¿Í PS2 º¤ÅÍ À¯´ÖÀº µÑ´Ù IEEE Ç¥ÁØÀÇ ºÎºÐÁýÇÕÀ» ¸¸Á·ÇÑ´Ù. ±× ºÎºÐÁýÇÕÀº ¿¹¿Ü 󸮸¦ ¿ÏÀüÈ÷ Áö¿øÇÏÁö´Â ¾ÊÀ¸³ª, ÀÌÁø Ç¥Çö¸¸Å­Àº Ç¥ÁØÀ» µû¸£¹Ç·Î ÀÌ ±ÛÀÇ ±â¹ýµéÀ» ¹®Á¦¾øÀÌ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

IEEE Ç¥ÁØÀº ºÎµ¿¼Ò¼öÁ¡ ¼ö¸¦ ÇϳªÀÇ ºÎÈ£ ºñÆ®, ÇϳªÀÇ ¹ÙÀ̾µÈ Áö¼ö(biased exponent, -ò¦â¦), ÇϳªÀÇ Á¤±ÔÈ­µÈ °¡¼ö(mantissa, Ê£â¦) ¶Ç´Â À¯È¿¼ö(significand, êóüùâ¦)·Î Ç¥ÇöÇÑ´Ù. ´ÜÁ¤µµ(single precision, Ó¤ïïÓø) 32 ºñÆ® ºÎµ¿¼Ò¼öÁ¡ ¼ö(CÀÇ float)´Â ±×¸² 2.1.1°ú °°Àº ¹æ½ÄÀ¸·Î ÀúÀåµÈ´Ù.

s = ºÎÈ£
e = ¹ÙÀ̾µÈ Áö¼ö
m = Á¤±ÔÈ­µÈ °¡¼ö
ºÎµ¿ ¼Ò¼öÁ¡ ¼ö´Â s x 1.m x 2(e-127)

±×¸² 2.1.1 IEEE 32 ºñÆ® ºÎµ¿¼Ò¼öÁ¡ Çü½Ä. ºÎÈ£ 1 ºñÆ®, Áö¼ö 8 ºñÆ®, °¡¼ö 23 ºñÆ®·Î µÇ¾î ÀÖ´Ù.

Áö¼ö´Â ¹ÙÀ̾µÈ Çü½ÄÀÇ ¾ç¼ö(positive number, åÕâ¦)·Î¼­ ÀúÀåµÈ´Ù(À̿ʹ ´Þ¸® Á¤¼öÀÇ °æ¿ì Áö¼ö´Â 2ÀÇ º¸¼ö(complement, ÜÍâ¦)·Î Ç¥ÇöµÈ´Ù). ¿©±â¼­ ¹ÙÀ̾µÇ¾ú´Ù´Â °ÍÀº ½ÇÁ¦ Áö¼ö¿¡ 127ÀÌ ´õÇØÁ³´Ù´Â ¶æÀÌ´Ù. °¡¼ö´Â 23 ºñÆ® ¼Ò¼ö¿¡ 1À» ºÙÀÌ´Â ¹æ½ÄÀ¸·Î Á¤±ÔÈ­µÈ ÇüÅ·ΠÀúÀåµÈ´Ù. ÀÌ·± ¹æ½ÄÀÇ Á¤±ÔÈ­´Â »ç¿ëÇÒ ¼ö ÀÖ´Â ºñÆ®µé·ÎºÎÅÍ ÃÖ´ëÀÇ Á¤¹Ðµµ¸¦ ¾ò±â À§ÇÑ °ÍÀÌ´Ù.

µû¶ó¼­, ÇϳªÀÇ ºÎµ¿¼Ò¼öÁ¡ ¼ö´Â 1¿¡¼­ 2 »çÀÌÀÇ °ªÀ¸·Î Á¤±ÔÈ­µÈ À¯È¿¼ö Çϳª, ÀÌÁø ¼Ò¼öÁ¡ÀÇ À§Ä¡¸¦ °¡¸®Å°´Â ¹ÙÀ̾µÈ Áö¼ö Çϳª, ±×¸®°í ºÎÈ£ ºñÆ® Çϳª·Î ±¸¼ºµÈ´Ù. ÇϳªÀÇ ºÎµ¿ ¼Ò¼öÁ¡ ¼ö´Â ´ÙÀ½°ú °°Àº °ø½ÄÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.

n = s x 1.m x 2(e -127)

¿¹¸¦ µé¾î¼­ ½ÊÁø¼ö -6.25´Â ÀÌÁø¼ö·Î -110.01À̸ç, À̸¦ À§ÀÇ °ø½ÄÀ¸·Î Ç¥ÇöÇϸé -1 x 1.1001 x 22°¡ µÈ´Ù. ÀÌ´Â s = 1, e = 2 + 127 = 10000001, m = [1.]1001¿¡ ÇØ´çÇÑ´Ù(±×¸² 2.1.2).

Áö¼ö¿¡´Â ¾à°£ÀÇ ¿¹¿ÜÀûÀÎ ±ÔÄ¢µéÀÌ Á¸ÀçÇÑ´Ù. e = 255ÀÏ ¶§, m¿¡´Â ¼ýÀÚ ¾Æ´Ô(not-a-number, NaN), Á¤ÀÇÇÒ ¼ö ¾ø´Â °á°ú, ¾çÀÇ ¹«ÇÑ´ë ¶Ç´Â À½ÀÇ ¹«ÇÑ´ë °°Àº Ưº°ÇÑ Á¶°ÇµéÀÌ µé¾î°£´Ù. e = 0Àº ¼ýÀÚÀÇ ¿ªÁ¤±ÔÈ­(denormalize)µÈ ¼ýÀÚ, Áï ¼ýÀÚ°¡ ³Ê¹« À۾Ƽ­ Áö¼ö°¡ 8 ºñÆ®¸¦ ³Ñ¾î°¬À» ¶§ÀÇ °æ¿ì¸¦ À§ÇØ ¾²ÀδÙ.

±×¸² 2.1.2 -6.25°¡ 32 ºñÆ® IEEE ºÎµ¿¼Ò¼öÁ¡ Çü½ÄÀ¸·Î ¸Þ¸ð¸®¿¡ ÀúÀåµÇ´Â ¹æ½Ä

¹èÁ¤µµ(double precision, ÛÃïïÓø) 64ºñÆ® ºÎµ¿¼Ò¼öÁ¡ ¼öµµ ¾Õ¿¡¼­ ¼³¸íÇÑ ¹æ½Ä°ú ºñ½ÁÇÑ ±¸Á¶¸¦ Áö´Ï°í ÀÖ´Ù. Â÷ÀÌ´Â Áö¼ö°¡ 11 ºñÆ®À̰í À¯È¿¼ö°¡ 52 ºñÆ®¶ó´Â Á¡ÀÌ´Ù. Áö¼öÀÇ ¹ÙÀ̾ °ªÀº 127ÀÌ ¾Æ´Ï¶ó 1023ÀÌ´Ù. ¹èÁ¤µµ ¼ö´Â ÀúÀå °ø°£ÀÌ ´ÜÁ¤µµÀÇ µÎ ¹èÀ̹ǷΠ¸Þ¸ð¸®·ÎºÎÅÍ ·ÎµåÇϰųª ó¸®ÇÏ´Â °ÍÀÌ ´õ ´À¸± ¼ö ÀÖ´Ù. ±×·± ÀÌÀ¯·Î °ÔÀÓ¿¡¼­´Â ¹èÁ¤µµ¸¦ Àß ¾²Áö ¾Ê´Â´Ù. ÀÌ ±Û¿¡¼­µµ ´ÜÁ¤µµ ºÎµ¿¼Ò¼öÁ¡¼ö¿¡ ´ëÇØ¼­¸¸ À̾߱âÇÑ´Ù.

ºÎµ¿¼Ò¼öÁ¡ Æ®¸¯

ÂüÁ¶ Å×ÀÌºí ±â¹ýÀ¸·Î µé¾î°¡±â Àü¿¡, ºÎµ¿¼Ò¼öÁ¡ ¼öÀÇ ºñÆ® ÆÐÅÏÀ» Á¶ÀÛÇÔÀ¸·Î½á ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀÇ ¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Â ¸î °¡Áö ºñ¹ýµéÀ» À̾߱âÇϰڴÙ.

float/int º¯È¯

ÀÌÈÄ¿¡ ³ª¿Ã ÂüÁ¶ Å×ÀÌºí ±â¹ýÀº ºÎµ¿¼Ò¼öÁ¡ ¼ö¸¦ Á¤¼ö·Î º¯È¯ÇÔÀ¸·Î½á ÂüÁ¶ Å×ÀÌºí »öÀεéÀ» »ý¼ºÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷ÀÇ ¼Óµµ´Â ´À¸± ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­, ÆæÆ¼¾ö II¿¡¼­ (int)f¶ó´Â Äڵ带 ÅëÇØ ÇϳªÀÇ floatÀ» ÇϳªÀÇ int·Î º¯È¯ÇÒ ¶§¿¡´Â ¾à 60 »çÀÌŬ Á¤µµ°¡ °É¸°´Ù. ÀÌó·³ ¸¹Àº »çÀÌŬÀÌ ¼ÒºñµÇ´Â ÀÌÀ¯´Â, ANSI C Ç¥ÁØ¿¡¼­´Â float¿¡¼­ int·ÎÀÇ Çüº¯È¯ µµÁß ¼Ò¼öºÎ´Â Àß·Á³ª°¡¾ß µÇ´Â °ÍÀ¸·Î ¸í½ÃÇϰí ÀÖÁö¸¸, Á¤ÀÛ FPU´Â °¡Àå °¡±î¿î Á¤¼ö·Î ¹Ý¿Ã¸²Çϱ⠶§¹®ÀÌ´Ù. int·ÎÀÇ º¯È¯À» À§Çؼ­´Â FPU ¹Ý¿Ã¸²(rounding) ¸ðµå¸¦ º¯°æÇÏ´Â ·çƾÀ» È£ÃâÇϰí, º¯È¯À» ¼öÇàÇϰí, ´Ù½Ã ¹Ý¿Ã¸² ¸ðµå¸¦ ¿ø·¡ ´ë·Î ¹Ù²Ù´Â °úÁ¤À» °ÅÃÄ¾ß Çϴµ¥, ÀÌ´Â ´ë´ÜÈ÷ ¹ø°Å·Î¿î ÀÛ¾÷ÀÌ´Ù.

int¿Í float »çÀÌÀÇ Çüº¯È¯¿¡ °É¸®´Â ½Ã°£Àº ÄÄÆÄÀÏ·¯³ª ÇÁ·Î¼¼¼­¿¡ µû¶ó ´Ù¸¦ ¼ö ÀÖ´Ù. ¸ðµç ÃÖÀûÈ­ ¿É¼ÇµéÀ» ÄѳõÀº »óÅ¿¡¼­ ÀÌ·¯ÇÑ º¯È¯À» ÀϹÝÀûÀÎ Çüº¯È¯°ú ºñ±³Çغ¸°í, »ý¼ºµÈ ¾î¼Àºí¸® Äڵ带 »ìÆìº¸¸é ½ÇÁ¦·Î ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ºÎµ¿¼Ò¼öÁ¡¿¡¼­ Á¤¼ö·ÎÀÇ Çüº¯È¯À» ¼öÇàÇÏ´Â Á» ´õ ºü¸¥ ¹æ¹ýÀº, ºÎµ¿¼Ò¼öÁ¡ ¼ö¿¡ 1 x 223À» ´õÇÏ°í ±× °á°ú¿¡¼­ »óÀ§ Áö¼ö ºñÆ®µéÀ» ¹ö¸®´Â °ÍÀÌ´Ù. ±×·³ Äڵ带 ¸ÕÀú »ìÆìº¸°í ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö ¼³¸íÇϰڴÙ.

ÆíÀǸ¦ À§ÇØ, ÇϳªÀÇ 32 ºñÆ® ¼ö¸¦ int ÇüÀ¸·Îµµ, ±×¸®°í float ÇüÀ¸·Îµµ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ø¿ëü(union)À» Á¤ÀÇÇÑ´Ù.


typedef union
{
      int      i;
      float    f;
   } _INTORFLOAT;

INTORFLOAT ÇüÀº ÀÌ ±ÛÀÇ ¸ðµç ¿¹Á¦ Äڵ忡¼­ ¾²ÀδÙ. ÀÌ °ø¿ëü¸¦ ÅëÇØ¼­ ¼öÀÇ ºñÆ® ÆÐÅÏ¿¡ Á¢±ÙÇÏ´Â °ÍÀº ¸Å¿ì °£´ÜÇØ º¸ÀÌÁö¸¸, ½ÇÁ¦·Î´Â ÄÄÆÄÀÏ·¯°¡ ¿¹»ó ¿Ü·Î ¸¹Àº Äڵ带 »ý¼ºÇØ¾ß ÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ÆæÆ¼¾ö IIÀÇ °æ¿ì ºÎµ¿¼Ò¼öÁ¡°ú Á¤¼ö ·¹Áö½ºÅ͵éÀº °³º°ÀûÀÎ Çϵå¿þ¾î À¯´Ö¿¡ Á¸ÀçÇϸç, µ¥ÀÌÅ͸¦ ÇÑ ÂÊ¿¡¼­ ´Ù¸¥ ÂÊÀ¸·Î ¿Å±â·Á¸é ¹Ýµå½Ã ¸Þ¸ð¸®¸¦ °ÅÃÄ¾ß ÇÑ´Ù. µû¶ó¼­ INTORFLOAT °ø¿ëüÀÇ ¼ö¿¡ Á¢±ÙÇÏ·Á¸é Ãß°¡ÀûÀÎ ¸Þ¸ð¸® ·Îµå-ÀúÀå °úÁ¤ÀÌ ÀϾ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ÇϳªÀÇ floatÀ» int·Î º¯È¯ÇÏ´Â ÄÚµåÀÌ´Ù.


   INTORFLOAT	n;		// º¯È¯ÇÒ ºÎµ¿¼Ò¼öÁ¡ ¼ö
   INTORFLOAT	bias;	// "¸¶¹ýÀÇ" ¼ö

   bias.i = (23 + 127) << 23;	// ¹ÙÀ̾ »ó¼ö = 1 x 2^23
   n.f = 123.456f;			// ºÎµ¿¼Ò¼öÁ¡ ¼ö

   n.f += bias.f;			// ºÎµ¿¼Ò¼öÁ¡À¸·Î¼­ ´õÇϰí
   n.i -= bias.i;			// Á¤¼ö·Î¼­ »«´Ù.
   // n.i´Â 123ÀÌ µÈ´Ù. ÀÌ´Â n.fÀÇ Á¤¼ö ºÎºÐ°ú ÀÏÄ¡ÇÑ´Ù.

¸¶¹ý°úµµ °°Àº ÀÏÀÌ ÀϾ´Âµ¥, ¿Ö ±×·±Áö »ìÆìº¸ÀÚ. ºÎµ¿¼Ò¼öÁ¡ ¼ö¿¡ 1 x 223À» ´õÇÏ¸é °¡¼ö°¡ ÇÏÀ§ 23ºñÆ® ÂÊÀ¸·Î ¹Ð·Á³ª¸ç, Áö¼ö´Â ¾Ë·ÁÁø °ªÀÎ (23 + 127)·Î ¼³Á¤µÈ´Ù. °Å±â¼­ ¾Ë·ÁÁø °ª (23 +127)À» Á¤¼ö·Î¼­ »©¸é ºÒÇÊ¿äÇÑ »óÀ§ ºñÆ®µéÀº »ç¶óÁö°í ÇÏÀ§ºñÆ®µé, Áï Á¤¼öºÎ¸¸ ³²°Ô µÈ´Ù. ±×¸² 2.1.3Àº 43.25¿¡ ´ëÇØ ÀÌ·¯ÇÑ °úÁ¤ÀÌ ÀϾ´Â ¿¹¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.

±×¸² 2.1.3 ¼ö 43.25¸¦ ºÎµ¿¼Ò¼öÁ¡ Çü½ÄÀ» Á¶ÀÛÇØ¼­ Á¤¼ö·Î º¯È¯ÇÑ´Ù. °¡¼ö¿¡¼­ ¹ØÁÙÄ£ ºñÆ®µéÀº ¸Þ¸ð¸®¿¡ ¸Â¾Æµé¾î°¡Áö ¾ÊÀ¸¸ç, Æó±âµÈ´Ù(¹Ý¿Ã¸²ÀÌ Àû¿ëµÊ).

ÆæÆ¼¾ö II¿¡¼­(¸ðµç °ÍµéÀÌ Ä³½Ã ¾È¿¡ ÀÖ´Ù°í ÇÒ ¶§) ÀÌ ±â¹ýÀ» »ç¿ëÇÏ¸é º¯È¯ ½Ã°£ÀÌ 60 »çÀÌŬ¿¡¼­ 5 »çÀÌŬ·Î ÁÙ¾îµç´Ù. ¹°·Ð ÀζóÀÎ ¾î¼Àºí¸® Äڵ带 ÀÌ¿ëÇϸé float¸¦ int·Î º¯È¯ÇÒ ¶§ FPU°¡ ¹Ý¿Ã¸² ¸ðµå¸¦ ¹Ù²ÙÁö ¾Êµµ·Ï ¸¸µå´Â °Íµµ °¡´ÉÇϱä ÇÏ´Ù. ÀÌ´Â ÀϹÝÀûÀÎ Çüº¯È¯º¸´Ù´Â ºü¸£³ª, ÀÌ ±Û¿¡¼­ ¼³¸íÇÏ´Â ¹ÙÀ̾ ±â¹ýº¸´Ù´Â ÀϹÝÀûÀ¸·Î ´À¸®´Ù.

ÀÌ ±â¹ýÀº º¯È¯ÇÒ ºÎµ¿¼Ò¼öÁ¡ ¼ö°¡ ´õÇØÁú ¹ÙÀ̾ »ó¼ö¿Í °ãÄ¡Áö ¾Ê´Â´Ù´Â °¡Á¤ ÇÏ¿¡¼­¸¸ ÀÛµ¿ÇÑ´Ù. ±¸Ã¼ÀûÀ¸·Î ¸»Çؼ­, ¼ö°¡ 223º¸´Ù ÀÛ´Ù¸é ¹®Á¦ ¾øÀÌ ÀÛµ¿ÇÏ°Ô µÈ´Ù.

À½ÀÇ ¼ö¸¦ Á¦´ë·Î ó¸®ÇÏ·Á¸é bias = ((23 + 127) << 23) + (1 << 22)¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. Ãß°¡µÈ (1 << 22)´Â 1.5 x 223¿¡ ÇØ´çÇϴµ¥, ÀÌ ºÎºÐ¿¡ ÀÇÇØ À½¼ö¿¡ ´ëÇÑ Á¤È®ÇÑ ¹Ý¿Ã¸²ÀÌ ÀϾ°Ô µÈ´Ù(±×¸² 2.1.4). ¿©ºÐÀÇ ºñÆ®µéÀº »¬¼ÀÀÇ ºô·Á¿À±â ¿¬»êÀÌ °¡¼öÀÇ ÃÖ»óÀ§ ºñÆ®(ºñÆ® 23)¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Êµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù. ÀÌ °æ¿ì 9°³°¡ ¾Æ´Ï¶ó 10°³ÀÇ »óÀ§ ºñÆ®µéÀÌ Á¦°ÅµÇ¹Ç·Î, ÀÌ ±â¹ýÀº ¾ç¼öº¸´Ù 1ºñÆ® ÀÛÀº ¹üÀ§¿¡¸¸ Àû¿ëµÈ´Ù. Áï º¯È¯ÇÒ ¼ö°¡ 222º¸´Ù ÀÛ¾Æ¾ß ÇÏ´Â °ÍÀÌ´Ù.

float¸¦ ÀÓÀÇÀÇ ¼Ò¼öºÎ ºñÆ®µéÀ» °¡Áø °íÁ¤¼Ò¼öÁ¡(fixed-point) Çü½ÄÀ¸·Î º¯È¯ÇÒ ¶§¿¡´Â bias = (23 - ¼Ò¼öºÎ_ºñÆ®¼ö + 127) << 23À» »ç¿ëÇÑ´Ù. À½¼ö¸¦ ó¸®Çϱâ À§Çؼ­´Â ¹ÙÀ̾¿¡ (1 << 22)¸¦ ´õÇØ¾ß ÇÑ´Ù. ±×¸² 2.1.5´Â ºÎµ¿¼Ò¼öÁ¡ ¼ö 192.8125¸¦ ¼Ò¼öºÎ°¡ 2ºñÆ®ÀÎ °íÁ¤¼Ò¼öÁ¡ ¼ö·Î º¯È¯ÇÏ´Â ¿¹ÀÌ´Ù.

Á¤¼ö¸¦ ºÎµ¿¼Ò¼öÁ¡ ¼ö·Î º¯È¯ÇÒ ¶§¿¡´Â À§¿¡¼­ À̾߱âÇÑ °úÁ¤À» ¿ªÀ¸·Î Àû¿ëÇÏ¸é µÈ´Ù.

±×¸² 2.1.4 À½ÀÇ float¸¦ int·Î ¹Ù²Ù´Â ¹æ½ÄÀº ¾çÀÇ floatÀÇ °æ¿ì¿Í Á¶±Ý ´Ù¸£´Ù. ÀÌ ±×¸²Àº -43.25¸¦ º¯È¯ÇÏ´Â ¿¹ÀÌ´Ù. ¹ØÁ٠ģ ºñÆ®µéÀÌ Æó±âµÉ ¶§ ¹Ý¿Ã¸²ÀÌ Àû¿ëµÊÀ¸·Î½á Á¤È®ÇÑ À½ÀÇ Á¤¼ö°¡ ¸¸µé¾îÁö´Â ¹æ½ÄÀ» ÁÖ¸ñÇϱ⠹ٶõ´Ù.
±×¸² 2.1.5 float¿¡¼­ int·Î º¯È¯µÉ ¶§ ¼Ò¼öºÎ ºñÆ®µéÀº º¸Á¸µÈ´Ù. ÀÌ ±×¸²Àº 192.8125¸¦ ¼Ò¼öºÎ°¡ 2 ºñÆ®ÀÎ °íÁ¤¼Ò¼öÁ¡ ¼ö·Î º¯È¯ÇÏ´Â ¿¹ÀÌ´Ù.

	n.i = 123;         // º¯È¯ÇÒ Á¤¼ö

	n.i += bias.i;     // Á¤¼ö·Î¼­ ´õÇϰí
	n.f -= bias.f;     // ºÎµ¿¼Ò¼öÁ¡ ¼ö·Î¼­ »«´Ù.
	// n.f´Â ¿ø·¡ÀÇ n.i¸¦ ºÎµ¿¼Ò¼öÁ¡À¸·Î º¯È¯ÇÑ °á°úÀÎ 123.0ÀÌ µÈ´Ù.

ÀϹÝÀûÀ¸·Î int¸¦ float·Î ¹Ù²Ù´Â ÀÛ¾÷Àº ÀϹÝÀûÀÎ Çüº¯È¯À¸·Îµµ ÃæºÐÈ÷ ºü¸£°Ô ¼öÇàÇÒ ¼ö ÀÖÀ¸¹Ç·Î, ÀÌ ±â¹ýÀ» »ç¿ëÇÒ ÇÊ¿ä´Â º°·Î ¾øÀ» °ÍÀÌ´Ù.

ºÎÈ£ ÆÇÁ¤

ºÎµ¿¼Ò¼öÁ¡ ¼öÀÇ ºÎÈ£ ºñÆ®´Â 31¹øÂ° ºñÆ®ÀÌ´Ù. ÀÌ´Â Á¤¼ö¿¡¼­µµ ¸¶Âù°¡ÁöÀÌ´Ù. µû¶ó¼­ Á¤¼ö À¯´ÖÀ» ÅëÇØ¼­µµ ºÎµ¿¼Ò¼öÁ¡ ¼öÀÇ À½°ú ¾çÀ» ±¸ºÐÇÒ ¼ö ÀÖ´Ù. f¸¦ ºÎµ¿¼Ò¼öÁ¡ ¼ö¶ó°í ÇÒ ¶§, ´ÙÀ½ÀÇ µÎ ÄÚµå Á¶°¢µéÀº (°ÅÀÇ)µ¿ÀÏÇÑ Àǹ̸¦ Áö´Ñ´Ù.


if ( f < 0.0f )	// ºÎµ¿¼Ò¼öÁ¡ ºñ±³
...

INTORFLOAT	ftmp;
ftmp.f = f;
if (ftmp.i < 0)	// Á¤¼ö ºñ±³
...

Àǹ̴ °°À¸³ª ¼Óµµ´Â ´Ù¸¦ ¼ö ÀÖ´Ù. Á¤¼ö ºñ±³°¡ ´õ ºü¸¦ ¼ö Àִµ¥, ÀÌ´Â Á¤¼öÀÇ ¸í·É ½ºÆ®¸² ÆÄÀÌÇÁ¶óÀÌ´×ÀÌ ´õ ¿ì¿ùÇϱ⠶§¹®ÀÌ´Ù. ±¸Ã¼ÀûÀÎ ¼º´É Æò°¡¸¦ ÇØº¸¸é ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù("°ÅÀÇ"¶ó°í Ç¥ÇöÇÑ ÀÌÀ¯´Â, À½ÀÇ 0¿¡ ´ëÇÑ Ã³¸® ¹æ½ÄÀÌ Á¶±Ý ´Ù¸£±â ¶§¹®ÀÌ´Ù).

ºñ±³

ºÎµ¿¼Ò¼öÁ¡ Çü½ÄÀº ºÎÈ£, Áö¼ö, °¡¼ö ¼ø¼­·Î ºñÆ®µéÀ» ÀúÀåÇϹǷÎ, Á¤¼ö À¯´ÖÀ» ÅëÇØ¼­ ºÎµ¿¼Ò¼öÁ¡ ¼öµéÀ» ºñ±³ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. aÀÇ Áö¼ö°¡ bÀÇ Áö¼öº¸´Ù Å©¸é °¡¼ö¿¡ »ó°ü¾øÀÌ a´Â bº¸´Ù Å©´Ù. µû¶ó¼­ ´ÙÀ½ µÎ ÄÚµå Á¶°¢µéÀÇ Àǹ̴ µ¿ÀÏÇÏ´Ù.


if ( a < b )			// ºÎµ¿¼Ò¼öÁ¡ ºñ±³
...

INTORFLOAT atmp, btmp;
atmp.f = f; btmp.f = b;
if (atmp.i < btmp.i)	// Á¤¼ö ºñ±³
...

ºÎÈ£ ÆÇÁ¤¿¡¼­¿Í ¸¶Âù°¡Áö·Î, Á¤¼öÀÇ ÆÄÀÌÇÁ¶óÀÌ´×ÀÌ ´õ ¿ì¿ùÇϹǷΠÁ¤¼ö ºñ±³°¡ ´õ ºü¸£´Ù. ´Ü ÀÌ ±â¹ýÀº a¿Í b°¡ ¸ðµÎ À½¼öÀÎ °æ¿ì¿¡´Â Àû¿ëµÇÁö ¾Ê´Â´Ù. ÀÌ´Â ºÎµ¿¼Ò¼öÁ¡¿¡¼­ Áö¼ö¿Í °¡¼ö ºñÆ®µéÀÌ Á¤¼öó·³ 2ÀÇ º¸¼ö Çü½ÄÀ¸·Î ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. µÎ ¼ö Áß Àû¾îµµ Çϳª°¡ ¾çÀÎ °ÍÀÌ Æ²¸²¾ø´Â °æ¿ì¶ó¸é ÀÌ ±â¹ýÀÌ µÎ ¼ö¸¦ ºñ±³ÇÏ´Â °¡Àå ºü¸¥ ¹æ¹ýÀÌ´Ù.

Á¦ÇÑ

°ÔÀÓ ÇÁ·Î±×·¡¹Ö¿¡¼­ ÇϳªÀÇ °ªÀ» ƯÁ¤ÇÑ ¹üÀ§·Î Á¦ÇÑ(clamping)ÇØ¾ß ÇÏ´Â °æ¿ì´Â ÈçÈ÷ »ý±ä´Ù. ƯÈ÷ 3D ÇÁ·Î±×·¡¹ÖÀ̶ó¸é ¼ö¸¦ [0, 1] ¹üÀ§·Î Á¦ÇÑÇØ¾ß ÇÏ´Â ÀÏÀÌ ¸¹´Ù. ºÎµ¿¼Ò¼öÁ¡ ¼ö f¸¦ 0À¸·Î Á¦ÇÑÇÏ´Â °Í(Áï f<0À̸é f=0)Àº ºÎÈ£ ºñÆ®¸¦ ÇϳªÀÇ ¸¶½ºÅ©·Î ¸¸µå´Â ½ÄÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.


INTORFLOAT ftmp;
ftmp.f = f;
int s = ftmp.i >> 31;   // ºÎÈ£ ºñÆ® ¸¶½ºÅ©¸¦ ¸¸µç´Ù.
s = ~s;                 // ¸¶½ºÅ©ÀÇ ºñÆ®µéÀ» µÚÁý´Â´Ù.
ftmp.i &= s;            // ftmp = ftmp & mask
f = ftmp.f;

s¿¡´Â fÀÇ ºñÆ®µéÀ» ¿À¸¥ÂÊÀ¸·Î 31¹ø À̵¿(shift)½ÃŲ °ªÀÌ µé¾î°£´Ù. ÀÌ¿¡ ÀÇÇØ 32°³ÀÇ ºñÆ®µé ¸ðµÎ ºÎÈ£ ºñÆ®·Î ä¿öÁø ¸¶½ºÅ©°¡ ¸¸µé¾îÁø´Ù. À̰ÍÀ» NOT ½Ã۸é f°¡ À½¼öÀ̸é 0, ¾ç¼öÀ̸é 1·Î ä¿öÁø °ªÀÌ µÈ´Ù. ´Ù½Ã À̰ÍÀ» f¿Í AND ½Ã۸é f´Â º¯ÇÏÁö ¾Ê°Å³ª 0ÀÌ µÈ´Ù. Á¤¸®ÇÏÀÚ¸é, f°¡ À½¼öÀ̸é 0ÀÌ µÇ°í, ¾ç¼öÀÌ¸é ±×³É ±×´ë·Î º¯ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù.

ÀÌ ÄÚµå´Â ¿ÏÀüÈ÷ Á¤¼ö À¯´ÖÀ¸·Î ½ÇÇàµÇ¸ç, ºñ±³³ª ºÐ±â(branching, ÝÂÐ÷)°¡ ¾ø´Ù. Äڵ带 º¥Ä¡¸¶Å©ÇغÃÀ» ¶§, ºÎµ¿¼Ò¼öÁ¡ ºñ±³È­ Á¦ÇÑ¿¡¼­´Â 18 »çÀÌŬ Á¤µµ°¡ ¼Ò¿äµÇ¾úÀ¸³ª, Á¤¼ö Á¦ÇÑ ¹æ½Ä¿¡´Â 5 »çÀÌŬ ÀÌÇϸ¸ ¼Ò¿äµÇ¾ú´Ù(ÀÌ »çÀÌŬµéÀº ·çÇÁÀÇ Ãß°¡ºÎ´ãµµ Æ÷ÇÔÇÑ °ÍÀÓÀ» ÁÖÀÇÇÒ °Í).

¾ç¼ö¸¦ 0À¸·Î Á¦ÇÑÇÏ´Â °æ¿ì(f>0À̸é f = 0)´Â À½¼ö¸¦ 0À¸·Î Á¦ÇÑÇÏ´Â °æ¿ìº¸´Ù »ç¿ë Ƚ¼ö°¡ ÀûÁö¸¸, ¸¶½ºÅ© ºñÆ®µéÀ» µÚÁýÀ» Çʿ䰡 ¾øÀ¸¹Ç·Î ±â¹ý ÀÚü´Â ´õ ½±´Ù.


INTORFLOAT ftmp;
ftmp.f = f;
int s = ftmp.i >> 31;	// ºÎÈ£ ºñÆ® ¸¶½ºÅ©¸¦ ¸¸µç´Ù.

ftmp.i &= s; 			// ftmp = ftmp & mask
f = ftmp.f;

1·ÎÀÇ Á¦ÇÑ(f > 1À̸é f = 1)Àº 1À» »©°í, 0À¸·Î Á¦ÇÑÇϰí, ´Ù½Ã 1À» ´õÇØ¼­ ¼öÇàÇÑ´Ù.


INTORFLOAT ftmp;
ftmp.f = f  1.0f;
int s = ftmp.i >> 31;	// ºÎÈ£ ºñÆ® ¸¶½ºÅ©¸¦ ¸¸µç´Ù.
ftmp.i &= s; 			// ftmp = ftmp & mask
f = ftmp.f + 1.0f;

ÀϹÝÀûÀ¸·Î, ¾î¼Àºí¸®¿¡¼­ Á¶°ÇºÎ load ¸í·ÉÀ» »ç¿ëÇÏ¸é ºÐ±âÇÒ Çʿ䰡 ¾ø¾îÁö¹Ç·Î(ºÐ±âÀÇ Çʿ伺ÀÌ Á¸ÀçÇÏ¸é ¸í·É ÆÄÀÌÇÁ¶óÀÎ ¾È¿¡¼­ÀÇ ºÐ±â ¿¹Ãø ·ÎÁ÷ÀÌ ±úÁø´Ù) Á¦ÇÑ ¿¬»êÀÇ ¼Óµµ°¡ ¿Ã¶ó°¡°Ô µÈ´Ù.

Àý´ë°ª

ÀÌ°Ç ½±´Ù. ºÎµ¿¼Ò¼öÁ¡ ¼ö´Â 2ÀÇ º¸¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î, ±×³É ºÎÈ£ ºñÆ®¸¦ 0À¸·Î ¼³Á¤Çϱ⸸ Çϸé Àý´ë°ªÀ» ¾òÀ» ¼ö ÀÖ´Ù.


INTORFLOAT ftmp;
ftmp.f = f;
ftmp.i &= 0x7fffffff;
f = ftmp.f;

f°¡ 0ÀÎÁö ºñ±³ÇÒ Çʿ䰡 ¾øÀ¸¹Ç·Î ¼Óµµ°¡ ¸Å¿ì ºü¸£´Ù.

»çÀÎ ¹× ÄÚ»çÀÎÀ» À§ÇÑ ¼±Çü ÂüÁ¶ Å×À̺í

°ÔÀÓ¿¡¼­ »ï°¢ÇÔ¼ö´Â À¯¿ëÇÏ°Ô ¾²ÀδÙ. ¿¹¸¦ µé¾î¼­ °Å¸®³ª °¢µµ¸¦ °è»êÇÑ´Ù´ø°¡, ¿øÈ£¸¦ ¸¸µç´Ù´ø°¡, ¹°°á ¸Þ½Ã¸¦ ¿òÁ÷ÀÌ´Â °æ¿ì µî¿¡¼­ »ï°¢ÇÔ¼ö´Â Áß¿äÇÑ ¿ªÇÒÀ» ´ã´çÇÑ´Ù. Ç¥ÁØ math ¶óÀ̺귯¸®¿¡´Â ¸ðµç ÀϹÝÀûÀÎ »ï°¢ÇÔ¼öµéÀÌ Æ÷ÇԵǾî ÀÖÀ¸³ª, ¸Å¿ì ´À¸®¸ç, floatÀÌ ¾Æ´Ï¶ó doubleÀ» ´Ù·ç±â ¶§¹®¿¡ ¸Þ¸ð¸®µµ ¸¹ÀÌ Àâ¾Æ¸Ô´Â´Ù. °ÔÀÓÀÇ °æ¿ì Á¤¹Ðµµ°¡ ³·Àº floatÀ» »ç¿ëÇØµµ ÃæºÐÇÑ °æ¿ì°¡ ¸¹´Ù.

»çÀΰú ÄÚ»çÀÎ °ªÀ» È¿À²ÀûÀ¸·Î ¾ò°íÀÚ ÇÒ ¶§ ÁÖ·Î ¾²´Â °ÍÀÌ ÂüÁ¶ Å×À̺í(lookup table)ÀÌ´Ù. ÀϹÝÀûÀÎ Á¢±Ù¹æ½ÄÀº °¢µµ¸¦ Á¤¼ö »öÀÎÀ¸·Î ÂüÁ¶Çϰí(¿¹¸¦ µé¸é 360µµ ÇѹÙÄû¸¦ 0¿¡¼­ 1023À¸·Î Ç¥ÇöÇÏ´Â µî) °¢ »öÀÎÀÇ »çÀÎ ¶Ç´Â ÄÚ»çÀÎ °ªÀ» °íÁ¤¼Ò¼öÁ¡À¸·Î °è»êÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª À̸¦ À§Çؼ­´Â °ÔÀÓ ÇÁ·Î±×·¡¸Ó°¡ »çÀΰú ÄÚ»çÀο¡ ´ëÇÑ ¶óÀ̺귯¸® ±¸ÇöÀ» ÀÌÇØÇØ¾ß Çϸç, ¶Ç Ç¥ÁØÀûÀÎ ¶óµð¾È(radian) °¢µµ ´ë½Å ÀÎÀ§ÀûÀÎ Á¤¼ö »öÀÎÀ» »ç¿ëÇØ¾ß ÇÑ´Ù´Â ´ÜÁ¡ÀÌ Á¸ÀçÇÑ´Ù. È¿À²ÀûÀÎ »öÀÎÀ» À§ÇÑ ºÎµ¿¼Ò¼öÁ¡ Æ®¸¯À» ÀÌ¿ëÇϸé, »ï°¢ÇÔ¼öÀÇ ±¸Çö¿¡ ´ëÇÑ ¼¼ºÎ¸¦ ¾ËÁö ¸øÇصµ Ç¥ÁØ ¶óµð¾È °¢µµ¸¦ ¹Þ¾Æµé¿©¼­ ºÎµ¿¼Ò¼öÁ¡ °ªÀ» µ¹·ÁÁÖ´Â »ï°¢ÇÔ¼ö ±â´ÉÀ» ¾òÀ» ¼ö ÀÖ´Ù.

»çÀÎ

¸ñÇ¥´Â ÀÌ·± ÇÔ¼öÀÌ´Ù.


	float fsin( float theta );

ÀÌ´Â ÂüÁ¶ Å×À̺íÀ» ÀÌ¿ëÇØ¼­ ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. 0¿¡¼­ 2pi¸¦ 256 ´Ü°è·Î ³ª´²¼­ ÀúÀåÇÏ´Â ÂüÁ¶ Å×À̺íÀ» ¸¸µå´Â °ÍÀº °£´ÙÇÏ´Ù. ·çÇÁ·Î i °ªÀ» Áõ°¡½ÃŰ¸é¼­ ´ÙÀ½ÀÇ Äڵ带 ¼öÇàÇÏ¸é µÈ´Ù.


sintable[i] = (float)sin((double)i * 2.0*3.14159265/256.0)

i¸¦ 0¿¡¼­ 255±îÁö º¯È­½ÃÄÑ °¡¸é¼­ sintable ¹è¿­À» ä¿ì¸é ÇØ»óµµ°¡ 256À̸ç floatÀÇ Á¤¹Ðµµ¸¦ °¡Áö´Â »çÀΰªÀ» ´ã´Â »çÀÎ ÂüÁ¶ Å×À̺íÀÌ »ý±ä´Ù.

fsin¿¡¼­ ÇÒ ÀÏÀº ¸Å°³º¯¼ö·Î ÁÖ¾îÁø float °ªÀ» 0¿¡¼­ 255 »çÀÌÀÇ Á¤¼ö »öÀÎÀ¸·Î ¹Ù²Ù°í ±× »öÀο¡ ÇØ´çÇÏ´Â float °ªÀ» µ¹·ÁÁÖ´Â °Í»ÓÀÌ´Ù.


	float fsin( float theta )
	{
	    i = (unsigned int)(theta * 256.0f/
 	        (2.0f*3.14159265f));return table[i];
	    }

±×·¯³ª ÀÌ ±¸ÇöÀº µÎ °¡Áö ¹®Á¦¸¦ °¡Áö°í ÀÖ´Ù. ¿ì¼± ÀÌ ÇÔ¼ö´Â ´À¸° float->int º¯È¯À» ¼öÇàÇϸç, µÎ ¹øÂ°·Î theta°¡ ¹üÀ§ [0, 2pi) ¹Ù±ùÀ̸é Á¤¼ö »öÀÎÀÌ ¹è¿­ÀÇ ¹üÀ§¸¦ ³Ñ¾î°¡°Ô µÈ´Ù.

µÎ ¹®Á¦¸¦ ÇØ°áÇÑ ¹öÀüÀº ´ÙÀ½°ú °°´Ù.


	#define FTOIBIAS	12582912.0f	// 1.5 * 2^23
	#define PI			3.14159265f

	float fsin( float theta )
	{
		int		i;
		INTORFLOAT	ftmp;
		ftmp.f = theta * (256.0f/(2.0f*PI)) + FTOIBIAS;
		i = ftmp.i & 255;
		return table[i];
	}

ÀÌ ¹öÀüÀº ¾Õ¿¡¼­ À̾߱âÇÑ ºÎµ¿¼Ò¼öÁ¡ ¹ÙÀ̾ Æ®¸¯À» ÀÌ¿ëÇØ¼­ ºü¸¥ ºÎµ¿¼Ò¼öÁ¡-Á¤¼ö º¯È¯À» ¼öÇàÇÑ´Ù. ¶ÇÇÑ º¯È¯µÈ Á¤¼ö¸¦ 255·Î ¸¶½ºÅ·ÇϹǷΠ»öÀÎÀÌ ¹è¿­ÀÇ ¹üÀ§ ¾È¿¡¼­¸¸ ¼øÈ¯µÈ´Ù. ´Ü f°¡ 2^22¸¦ ³ÑÀ¸¸é float->int º¯È¯ Æ®¸¯ÀÌ ½ÇÆÐÇϹǷÎ, ÁÖ±âÀûÀ¸·Î f¸¦ °¨¼Ò½ÃÄѼ­ [0, 2p) ¹üÀ§ ¾È¿¡ µé¾î°¡µµ·Ï ÇØ¾ß ÇÒ ÇÊ¿ä´Â ¿©ÀüÈ÷ Á¸ÀçÇÑ´Ù.

ÀÌ ¹öÀüÀÇ fsinÀº ÆæÆ¼¾ö II¿¡¼­(¸ðµç ÄÚµå¿Í µ¥ÀÌÅͰ¡ ±âº» ij½Ã¿¡ µé¾îÀÖ´Ù°í ÇÒ ¶§) ¾à 10 »çÀÌŬÀ» ¼ÒºñÇϴµ¥, À̴ ǥÁØ math ¶óÀ̺귯¸®ÀÇ sinÀÌ °ÅÀÇ 140 »çÀÌŬÀÎ °Í¿¡ ºñÇÏ¸é ¾öû³­ Çâ»óÀÌ´Ù(sinÀÌ Çϵå¿þ¾î FPUÀÇ »çÀÎ ¸í·ÉÀ» »ç¿ëÇÑ´Ù´Â Á¡À» »ý°¢ÇÏ¸é ´õ¿í ±×·¸´Ù).

256 Ç׸ñÀÇ ºÎµ¿¼Ò¼öÁ¡ ÂüÁ¶ Å×À̺íÀº 1KÀÇ ¸Þ¸ð¸®¸¦ Â÷ÁöÇϴµ¥, ÀÌ Á¤µµ¸é ³»ºÎ ·çÇÁ ¾È¿¡¼­ ij½Ã¿¡ ¾ÈÀüÇÏ°Ô ¸Ó¹«¸¦ ¼ö ÀÖ´Â Å©±âÀÌ´Ù. Ç׸ñÀÌ 256°³À̹ǷΠÀÌ Å×ÀÌºí¿¡ ÀÇÇÑ »çÀÎ °ªÀÇ Á¤È®µµ´Â 8 ºñÆ®ÀÌ´Ù. ÃÖ¾ÇÀÇ °æ¿ì¿¡¼­ÀÇ ¿ÀÂ÷´Â ÂüÁ¶ Å×À̺íÀ» ºÐ¼®ÇÔÀ¸·Î½á ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù(ºÎ·Ï CDÀÇ Äڵ带 Âü°íÇÒ °Í). ÂüÁ¶ Å×À̺íÀÇ Å©±â°¡ Ŭ ¼ö·Ï Á¤È®µµ°¡ ¿Ã¶ó°¡³ª, ij½Ã ÀûÁß·üÀÌ ³·¾ÆÁö¹Ç·Î ¼Óµµ´Â ¶³¾îÁø´Ù.

ÄÚ»çÀÎ

ÄÚ»çÀÎ ÇÔ¼öµµ µû·Î ÂüÁ¶ Å×À̺íÀ» ¸¸µé¾î¼­ »çÀÎ ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ±¸ÇöÇÏ¸é µÈ´Ù. ±×·¯³ª cos(q) = sin(q + pi/2)¶ó´Â ¼ºÁúÀ» ÀÌ¿ëÇÏ¸é »çÀΰú ÄÚ»çÀÎÀÌ °°Àº ÂüÁ¶ Å×À̺íÀ» °øÀ¯ÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. ÂüÁ¶ Å×ÀÌºí »öÀÎÀ» ¸¸µé ¶§ 256/4(pi/2 ´Â 25µµ¿¡ ÇØ´çÇϹǷÎ)¸¦ ´õÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ´ÙÀ½ Äڵ尡 À̸¦ ±¸ÇöÇÏ´Â ¿¹ÀÌ´Ù.


	float fcos( float theta )
	{
		int		i;
		INTORFLOAT	ftmp;
		ftmp.f = theta * (256.0f/(2.0f*PI)) + FTOIBIAS + 64f;
		i = ftmp.i & 255;
		return table[i];
	}

»óȲ¿¡ µû¶ó¼­´Â µ¿½Ã¿¡ »çÀΰú ÄÚ»çÀÎ °ªÀ» ¸ðµÎ ±¸ÇÏ´Â °ÍÀÌ À¯¿ëÇÒ ¶§°¡ ÀÖ´Ù. ±×·± °æ¿ì ÇϳªÀÇ ÇÔ¼ö ¾È¿¡¼­ »çÀÎ °ªÀ» ±¸Çϰí, ±× ¶§ ¾²ÀÎ »öÀο¡ 64¸¦ ´õÇÏ´Â ½ÄÀ¸·Î ÄÚ»çÀÎ °ªÀ» ±¸ÇÏ°Ô µÇ¸é ¼º´ÉÀÌ ´õ¿í Çâ»óµÉ °ÍÀÌ´Ù. ¸¶Âù°¡Áö·Î, ¿©·¯ »çÀεé°ú ÄÚ»çÀεéÀ» ÇÑ ¹ø¿¡ ±¸ÇØ¾ß ÇÏ´Â °æ¿ì¶ó¸é ºÒÇÊ¿äÇÑ ¹Ýº¹ °è»êÀ» ÁÙÀÌ´Â ¹æÇâÀ¸·Î Äڵ带 ¼öÁ¤ÇÏ¸é µÈ´Ù.

Á¦°ö±Ù¿¡ ´ëÇÑ ´ë¼öÀû ÃÖÀûÈ­

Á¦°ö±Ù(square root)Àº °Å¸® °è»êÀ̳ª º¤ÅÍ Á¤±ÔÈ­, ÀÌÂ÷¹æÁ¤½ÄÀÇ ÇØ ±¸Çϱ⠵¼­ ÈçÈ÷ ¾²ÀδÙ. FPU¿¡µµ Á¦°ö±ÙÀ» ±¸ÇÏ´Â ¸í·ÉÀÌ ÀÖ±ä ÇÏÁö¸¸, ÆæÆ¼¾ö II CPU¿¡¼­ Ç¥ÁØ C ¶óÀ̺귯¸®ÀÇ sqrt ÇÔ¼ö´Â ¿©ÀüÈ÷ 80 »çÀÌŬ Á¤µµ¸¦ ¼ÒºñÇÑ´Ù. µû¶ó¼­ ÃÖÀûÈ­¸¦ ½ÃµµÇÒ ¸ÔÀ̰¨À¸·Î ÃæºÐÈ÷ ¼±Á¤µÉ ¸¸ ÇÏ´Ù.

Á¦°ö±Ù ÃÖÀûÈ­ ¿ª½Ã ºÎµ¿¼Ò¼öÁ¡ ºñÆ®µéÀ» À̸® Àú¸® Á¶ÀÛÇÏ´Â ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù. Á¦°ö±ÙÀº Áö¼ö¿¡ °ü·ÃµÈ °ÍÀÌ¸ç °¡¼ö¿Í´Â »ó°üÀÌ ¾ø±â ¶§¹®¿¡, Áö¼ö ºñÆ®µé¸¸ Àû´çÈ÷ Á¶ÀÛÇϸé Á¦°ö±ÙÀ» ¾òÀ» ¼ö ÀÖ´Ù. ºÎµ¿¼Ò¼öÁ¡ÀÇ Á¦°ö±Ù¿¡ °ü·ÃµÈ °ø½ÄµéÀº ´ÙÀ½°ú °°´Ù.

f = 1.m x 2e

sqrt(f) = sqrt(1.m x 2e) = sqrt(1.m) x 2e/2

À̵éÀ» ÀÚ¼¼È÷ º¸¸é, °¡¼ö´Â ±×´ë·Î ³öµÎ°í Áö¼ö¸¸ 2·Î ³ª´©¸é µÈ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ±×·¯³ª Áö¼ö´Â Á¤¼öÀ̹ǷÎ, Áö¼ö°¡ Ȧ¼öÀ̸é 2·Î ³ª´³À» ¶§ ÇÏÀ§ ºñÆ®¸¦ ÀÒ°Ô µÈ´Ù. ÀÌ ¹®Á¦´Â Áö¼öÀÇ ÇÏÀ§ ºñÆ®¸¦ °¡¼ö·Î ³Ñ°ÜÁÜÀ¸·Î½á ÇØ°áÇÒ ¼ö ÀÖ´Ù. °á·ÐÀûÀ¸·Î ÇØ´äÀº ¹Ù·Î ´ÙÀ½°ú °°Àº °ø½ÄÀÌ µÈ´Ù.

sqrt(f) = sqrt(1.m x 2e0) x 2[e/2]

¿©±â¼­ e0Àº Áö¼öÀÇ ÇÏÀ§ ºñÆ®ÀÌ´Ù.

»çÀο¡¼­¿Í ¸¶Âù°¡Áö·Î Á¦°ö±Ùµµ 256 Ç׸ñÀÇ Å×À̺íÀ» ¸¸µé¾î¼­ ÂüÁ¶ÇÏ´Â ¹æ½ÄÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ Å×ÀÌºí¿¡´Â °¡¼ö¸¸ ´ã¾ÆµÎ°í, Áö¼ö´Â ºñÆ® Á¶ÀÛÀ» ÅëÇØ¼­ ¾òÀ¸¸é µÈ´Ù.


float  fsqrt( float f )
   {
   INTORFLOAT		ftmp;
   unsigned int	n, e;

   ftmp.f = f;
   n = ftmp.i;
   e = (n >> 1) & 0x3f800000;	// Áö¼ö¸¦ 2·Î ³ª´«´Ù.
   n = (n >> 16) & 0xff;	// Å×ÀÌºí »öÀÎÀº e0+m22-m16

   ftmp.i = sqrttable[n] + e;	// °á°úµéÀ» ÇÕÇÑ´Ù.

   return ftmp.f;
}

Å×ÀÌºí »öÀÎÀº °¡¼öÀÇ »óÀ§ ºñÆ®µé°ú Áö¼ö(e0)ÀÇ ÇÏÀ§ ºñÆ®¸¦ Á¶ÇÕÇÑ °ÍÀÌ´Ù. ÂüÁ¶ Å×À̺íÀº ¹Ì¸® °è»êµÈ Á¦°ö±ÙÀÇ °¡¼ö¸¦ ´ã°í ÀÖ´Ù.

Á¦°ö±ÙÀÇ Áö¼ö´Â fÀÇ Áö¼ö¸¦ ¿À¸¥ÂÊÀ¸·Î 1ºñÆ® À̵¿½ÃŰ¸é ¾òÀ» ¼ö ÀÖ´Ù(°á°úÀûÀ¸·Î´Â 2·Î ³ª´©´Â °ÍÀÓ). Áö¼ö´Â ¹ÙÀ̾µÈ °ÍÀ̹ǷΠ1ºñÆ® À̵¿½ÃŰ¸é °á°úÀûÀ¸·Î´Â Áö¼ö»Ó¸¸ ¾Æ´Ï¶ó ¹ÙÀ̾ ¶ÇÇÑ 2·Î ³ª´²Áö°Ô µÈ´Ù. ÀÌ´Â ¿øÄ¡ ¾Ê´Â °á°úÀ̹ǷÎ, sqrttableÀÇ Ç׸ñ¿¡ Ãß°¡ÀûÀÎ Àμö¸¦ ´õÇÔÀ¸·Î½á Áö¼ö¸¦ ´Ù½Ã ¹ÙÀ̾½ÃÄÑ¾ß ÇÑ´Ù.

ÀÌ fsqrt ÇÔ¼ö´Â ÆæÆ¼¾ö II CPU¿¡¼­ ¾à 16 »çÀÌŬÀ» ¼Ò¸ðÇϴµ¥, À̴ ǥÁØ C ¶óÀ̺귯¸®ÀÇ ±¸Çöº¸´Ù 5 ¹è Á¤µµ ºü¸¥ °ÍÀÌ´Ù. ¹°·Ð À̰ÍÀº ¸ðµç °ÍµéÀÌ Ä³½Ã ¾È¿¡ µé¾îÀÖ´Ù´Â °¡Á¤ ÇÏÀÇ À̾߱âÀÌ´Ù.

¾Ë°í¸®Áò¿¡ ´ëÇÑ Á» ´õ »ó¼¼ÇÑ ¼³¸íÀº ºÎ·Ï CDÀÇ ¿¹Á¦ Äڵ带 Âü°íÇϱ⠹ٶõ´Ù.

ÀÓÀÇÀÇ ÇÔ¼öÀÇ ÃÖÀûÈ­

ÇϳªÀÇ ¸Å°³º¯¼ö¸¦ °¡Áö´Â ÀÓÀÇÀÇ ºÎµ¿¼Ò¼öÁ¡ ÇÔ¼ö¸¦ »ý°¢ÇϺ¸ÀÚ.

y = f(x)

¾Õ¿¡¼­ »ìÆì º» ±â¹ýµéÀ» ÅëÇØ¼­, ÀϹÝÀûÀÎ ÇÔ¼ö¿¡ ´ëÇÑ Å×ÀÌºí ±â¹Ý ÃÖÀûÈ­ÀÇ µÎ °¡Áö ±âº»ÀûÀÎ ¹æ¹ýÀ» ¹è¿ï ¼ö ÀÖ´Ù. »çÀΰú ÄÚ»çÀÎÀÇ °æ¿ì, xÀÇ °ªÀº ¾Ë·ÁÁø ¹üÀ§¿¡ ´ëÇØ ¼±ÇüÀûÀ¸·Î ¼ö·®È­(quantize)µÇ¸ç, y¸¦ ÂüÁ¶Çϱâ À§ÇÑ Å×ÀÌºí »öÀÎÀ¸·Î ¾²ÀδÙ. Á¦°ö±ÙÀÇ °æ¿ì, xÀÇ °ªÀº ´ë¼öÀûÀ¸·Î ¼ö·®È­µÇ¸ç ¾î¶°ÇÑ ÇϳªÀÇ °ª(±× Áï½Ã y °ªÀÌ µÇ´Â °ÍÀÌ ¾Æ´Ï´Ù)À» ÂüÁ¶Çϱâ À§ÇÑ Å×ÀÌºí »öÀÎÀ¸·Î ¾²ÀδÙ. ±× ÇϳªÀÇ °ªÀº xÀÇ Áö¼öÀÇ ÇÔ¼ö¿¡ ÀÇÇØ ºñ·ÊµÇ¸ç, ±× °á°ú·Î ÃÖÁ¾ÀûÀÎ yÀÇ °ªÀÌ ³ª¿Â´Ù.

¼±ÇüÀû Á¢±Ù¿¡¼­, ÇϳªÀÇ ºÎµ¿¼Ò¼öÁ¡ ¼ö´Â Àçºñ·Ê µÈ ÈÄ ÇϳªÀÇ Á¤¼ö·Î º¯È¯µÇ¸ç, ±× Á¤¼ö´Â ¼±Çü ¼ö·®È­¸¦ ÅëÇØ¼­ ÇϳªÀÇ ÂüÁ¶ Å×ÀÌºí »öÀÎÀÌ µÈ´Ù. ÀÌ´Â Á¤¼ö ÂüÁ¶ Å×À̺í°ú ¸Å¿ì ºñ½ÁÇÑ °£´ÜÇÑ ±â¹ýÀ¸·Î, ´Ù¸¥ Á¡À̶ó¸é ºÎµ¿ ¼Ò¼öÁ¡ °ªÀ» Á¤¼ö·Î È¿À²ÀûÀ¸·Î º¯È¯Çϱâ À§ÇØ ¾à°£ÀÇ Æ®¸¯À» »ç¿ëÇÏ´Â °Í »ÓÀÌ´Ù. ´ë¼öÀû Á¢±ÙÀÇ °æ¿ì¿¡´Â ºÎµ¿¼Ò¼öÁ¡ ºñÆ® ÆÐÅÏÀ» Á÷Á¢ Å×ÀÌºí »öÀÎÀ¸·Î »ç¿ëÇÔÀ¸·Î½á ´ë¼öÀûÀÎ ¼ö·®È­¸¦ ¼öÇàÇÑ´Ù.

ÀÌ µÎ ±â¹ýÀ» ÀϹÝÈ­Çϸé ÀÓÀÇÀÇ ÇÔ¼ö¿¡ ´ëÇÑ ÃÖÀûÈ­¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¼±ÇüÀû ¼ö·®È­¸¦ »ç¿ëÇÒ °ÍÀÌ³Ä ´ë¼öÀû ¼ö·®È­¸¦ »ç¿ëÇÒ °ÍÀ̳Ĵ ÇÔ¼öÀÇ ¼º°Ý¿¡ µû¶ó ´Þ¶óÁø´Ù.

¼±ÇüÀû ¼ö·®È­

¾Õ¿¡¼­ À̾߱âÇÑ fsin ÇÔ¼ö´Â ¼±ÇüÀû ¼ö·®È­¸¦ ÅëÇÑ ÃÖÀûÈ­ÀÇ Æ²·Î ¾²ÀÏ ¼ö ÀÖ´Ù. ¾î¶² ÇÔ¼öÀÇ Á¤ÀÇ¿ª(xÀÇ ¹üÀ§)ÀÌ °íÁ¤µÇ¾î ÀÖ´Ù°í ÇÏÀÚ(Áï x E [A, B) ). ±×·¯¸é ±× ¹üÀ§¸¦ ±ÕÀÏÇÏ°Ô Æ÷°ýÇÏ´Â ÇϳªÀÇ ÂüÁ¶ Å×À̺íÀ» ¸¸µé ¼ö ÀÖÀ¸¸ç, ±× ¹üÀ§ ¾ÈÀÇ x¸¦ Å×ÀÌºí¿¡ ´ëÇÑ ÀûÀýÇÑ »öÀÎÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù. ±×·¸´Ù°í ÇÒ ¶§ ÃÖÀûÈ­µÈ ÇÔ¼ö f´Â ´ÙÀ½°ú °°Àº ¸ð½ÀÀÏ °ÍÀÌ´Ù.


#define FTOIBIAS		12582912.0f	// 1.5 * 2^23
#define TABLESIZE		256
#define INDEXSCALE		((float)TABLESIZE / (B  A))

float flut( float x )
{
	int		i;
	INTORFLOAT	ftmp;
	ftmp.f = x * INDEXSCALE + (FTOIBIAS  A * INDEXSCALE);
	i = ftmp.i & (TABLESIZE  1);
	return ftable[i];
}

ÂüÁ¶ Å×À̺íÀº ´ÙÀ½°ú °°Àº ½ÄÀ¸·Î ÃʱâÈ­µÈ´Ù.


ftable[i] = f( (float)i / INDEXSCALE + A );

¿©±â¼­ f´Â ¿ÏÀüÇÑ Á¤¹Ðµµ¸¦ °¡Áø ºÎµ¿¼Ò¼öÁ¡ °ªÀ» µ¹·ÁÁÖ´Â "ÁøÂ¥" ÇÔ¼öÀÌ´Ù. flut´Â µÎ ¹øÀÇ ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê(°ö¼À, »¬¼À)°ú ÇÑ ¹øÀÇ Á¤¼ö ºñÆ®´ÜÀ§ ¸¶½ºÅ·, ±×¸®°í ÇÑ ¹øÀÇ Å×À̺í ÂüÁ¶¸¸À¸·Î ³¡³­´Ù. ÆæÆ¼¾ö II CPUÀÇ °æ¿ì ¾à 10 »çÀÌŬ Á¤µµ°¡ ¼ÒºñµÈ´Ù.

ÀÎÁ¢ÇÑ µÎ Å×À̺í Ç׸ñµéÀ» ¼±ÇüÀ¸·Î º¸°£ÇÔÀ¸·Î½á(CPU »çÀÌŬÀÌ ¾à°£ ´õ ¼ÒºñµÇ°ÚÁö¸¸) Á¤È®¼ºÀ» ³ôÀÌ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀϹÝÀûÀÎ ÇÔ¼ö¿¡ ´ëÇÑ ÀÌ·¯ÇÑ ÃÖÀûÈ­¸¦ Áö¿ø(Á¤È®¼º Çâ»óÀ» Ãß°¡ÀûÀÎ ¼±Çü º¸°£µµ Æ÷ÇԵǾî ÀÖ´Ù)ÇÏ´Â API°¡ ºÎ·Ï CD¿¡ µé¾î ÀÖ´Ù.

´ë¼öÀû ¼ö·®È­

¼±ÇüÀû ¼ö·®È­´Â ¹üÀ§ [A,B)¸¦ ±ÕÀÏÇÏ°Ô ´Ù·é´Ù. ÇÔ¼ö¿¡ µû¶ó¼­´Â ´ë¼öÀû Ãë±ÞÀÌ ´õ ÀûÇÕÇÑ °æ¿ì°¡ ÀÖ´Ù(Á¦°ö±Ù µî). ±âº»ÀûÀÎ °³³äÀº, ºÎµ¿¼Ò¼öÁ¡ x¸¦ Á¤¼ö ¹üÀ§·Î º¯È¯ÇÏ´Â ´ë½Å ºÎµ¿¼Ò¼öÁ¡ Ç¥ÇöÀÇ ºñÆ®µéÀ» Á÷Á¢ Å×ÀÌºí »öÀÎÀ¸·Î »ç¿ëÇÑ´Ù´Â °ÍÀÌ´Ù. ±âº»ÀûÀÎ Á¢±Ù ¹æ½ÄÀº, ºÎÈ£³ª Áö¼ö, °¡¼öÀÇ ÀϺΠºñÆ®µéÀ» ÃßÃâÇϰí Á¶ÀÛÇÔÀ¸·Î½á IEEE 1:8:23 Çü½ÄÀÇ ºÎµ¿¼Ò¼öÁ¡À» ±× º¸´Ù ´ú Á¤¹ÐÇÑ ¶Ç ´Ù¸¥ ÀÓÀÇÀÇ ºÎµ¿¼Ò¼öÁ¡ Çü½ÄÀ¸·Î º¯È¯ÇÏ´Â °ÍÀÌ´Ù.

Á¦°ö±Ù ¿¹¿¡¼­´Â 8°³ÀÇ ºñÆ®µéÀ» ÃßÃâÇÔÀ¸·Î½á 0:1:7ÀÇ ´ë¼öÀûÀ¸·Î ¼ö·®È­µÈ °ªÀ» ¾ò¾ú´Ù. ÀÌ ¶§ 1 ºñÆ®´Â Áö¼ö·Î, 7 ºñÆ®´Â °¡¼ö·Î »ç¿ëµÇ¾ú´Ù. ºÎÈ£´Â Æó±âÇߴµ¥, ½Ç¼ö °ø°£¿¡¼­ À½ÀÇ Á¦°ö±ÙÀº Á¤ÀǵÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù. 0:1:7 Çü½ÄÀº 8 ºñÆ®ÀÇ °¡¼ö(IEEE Ç¥Çö¿¡¼­´Â Ç×»ó °¡¼ö ¾Õ¿¡ 1ÀÌ ºÙ´Â´Ù´Â Á¡À» ±â¾ïÇÒ °Í)¿Í 1 ºñÆ®ÀÇ Áö¼ö·Î ÀÌ·ç¾îÁö¹Ç·Î, [1].0000000 x 20¿¡¼­ [1].1111111 x 21 »çÀÌÀÇ °ªµéÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â [1,4)¿¡ ÇØ´çÇÑ´Ù.

Á¦°ö±Ù ÇÔ¼öÀÇ ÀÛµ¿ °úÁ¤Àº 0:1:7 Çü½ÄÀ¸·Î ¼ö·®È­µÈ ¼ö¿¡ ´ëÇÑ ¿¬»ê(ÇÑ ¹øÀÇ Å×À̺í ÂüÁ¶)°ú Áö¼ö¿¡ ´ëÇÑ ¶Ç ´Ù¸¥ ¿¬»êÀ¸·Î ³ª´µ¾îÁø´Ù. ±×¸®°í Ãß°¡ÀûÀÎ ÀÛ¾÷À» ÅëÇØ¼­ µÎ °³ÀÇ °³º°ÀûÀÎ ¿¬»êµéÀ» ÃÖÀûÈ­Çϰí, ÃÖÁ¾ÀûÀ¸·Î °¡¼ö¿Í Áö¼ö¸¦ ÇϳªÀÇ 32 ºñÆ® ºÎµ¿¼Ò¼öÁ¡ ¼ö(À̰ÍÀÌ ÇÔ¼öÀÇ °á°úÀÌ´Ù)·Î °áÇÕÇÑ´Ù. ´Ù¸¥ ÇÔ¼öµé ¿ª½Ã ÀÌ·¯ÇÑ ´ë¼öÀû ¼ö·®È­ ¹æ¹ýÀ¸·Î ÃÖÀûÈ­ÇÒ ¼ö ÀÖ´Ù. IEEE Çü½Ä¿¡¼­´Â ÇÑ ¹øÀÇ À̵¿°ú ÇÑ ¹øÀÇ ¸¶½ºÅ© ¿¬»ê¸¸À¸·Îµµ Áö¼öÀÇ ÇÏÀ§ ºñÆ®µé°ú °¡¼öÀÇ »óÀ§ ºñÆ®µéÀ» »Ì¾Æ³¾ ¼ö ÀÖ´Ù. Áö¼ö·ÎºÎÅÍ ebits °³ÀÇ ºñÆ®µéÀ» »Ì°í °¡¼ö·ÎºÎÅÍ mbits °³ÀÇ ºñÆ®µéÀ» »Ì¾Æ³»´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

bits = (n >> (23 - mbits)) & ((1 << (ebits + mbits)) - 1)

ÀÌ ÄÚµå´Â ¼ö nÀÇ °¡¼ö¿Í Áö¼ö Áß ¿øÇÏ´Â ¸¸Å­ÀÇ ºñÆ®µéÀ» ¼ö nÀÇ °¡Àå ¿À¸¥ÂÊÀ¸·Î ¹Ð¾î¼­ À̵¿½Ã۰í, ºÒÇÊ¿äÇÑ ºñÆ®µéÀ» ¾ø¾Ö±â À§ÇØ(¸¶½ºÅ·) AND ¿¬»êÀ» ¼öÇàÇÏ´Â °ÍÀÌ´Ù.

ºÎÈ£ ºñÆ® ¿ª½Ã ¼Õ½±°Ô Á¶ÀÛÇÒ ¼ö ÀÖ´Ù. ¸Å°³º¯¼ö°¡ Ç×»ó ¾çÀÓÀÌ È®½ÇÇÏ´Ù´ø°¡, ¶Ç´Â ÇÔ¼öÀÇ °á°ú°¡ Ç×»ó ¾çÀÓÀÌ È®½ÇÇÏ´Ù¸é ºÎÈ£ ºñÆ®´Â ¹«½ÃÇÒ ¼ö ÀÖ´Ù. °á°úÀÇ ºÎÈ£°¡ ¸Å°³º¯¼öÀÇ ºÎÈ£¿Í °°´Ù¸é(Áï f(-x) = -f(x)), ºÎÈ£ ºñÆ®¸¦ ÀúÀåÇØ µÎ¾ú´Ù ´Ù½Ã º¹¿ø½Ã۱⸸ ÇÏ¸é µÈ´Ù.

¸Å°³º¯¼ö °ªÀÌ Æ¯Á¤ ¹üÀ§·Î Á¦ÇѵǾî ÀÖ´Â ÇÔ¼öÀÇ °æ¿ì, Áö¼ö¿Í ´ë¼ö·ÎºÎÅÍ »Ì¾Æ³½ ºñÆ®µéÀ» ¸¶½ºÅ·ÇÔÀ¸·Î½á Á÷Á¢ Å×ÀÌºí »öÀÎÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ Á¤ÀÇ¿ªÀÌ [1,16)À̶ó¸é Áö¼ö¿¡¼­ 2 ºñÆ®, ´ë¼ö¿¡¼­ 4 ºñÆ®(¿¹¸¦ µéÀÚ¸é)¸¦ »Ì¾Æ³»¸é µÈ´Ù. ±×·¯¸é 0:2:4 Çü½ÄÀÇ ºñÆ®µéÀÌ µÇ´Âµ¥, ÀÌ´Â 1.0000 x 20¿¡¼­ 1.1111 x 23 »çÀÌÀÇ ÀÌÁø °ªµéÀ» ÀǹÌÇϸç, ½ÊÁø¼ö·Î´Â 1.0¿¡¼­ 15.5 »çÀ̰¡ µÈ´Ù. ÀÌ ºñÆ®µé¸¸ »Ì¾Æ³»¸é ±× Áï½Ã 64 Ç׸ñÀÇ Å×ÀÌºí¿¡ ´ëÇÑ »öÀÎÀÌ µÇ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¿¬»êÀº ´Ü ¸î »çÀÌŬ·Î ¼öÇàÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¼Óµµ°¡ ºü¸£´Ù. ±×·¯³ª Á¤¹Ðµµ°¡ ´õ ¸¹ÀÌ ÇÊ¿äÇÏ´Ù¸é Å×À̺íÀ» Ű¿ö¾ß Çϸç, Å×À̺íÀÌ ¾î´À Á¤µµ ÀÌ»ó Ä¿Áö¸é ij½Ã ÀûÁß·üÀÌ ¶³¾îÁö°Ô µÈ´Ù.

¶Ç ´Ù¸¥ ¹æ¹ýÀº Á¦°ö±Ù ¿¹¿¡¼­¿Í °°ÀÌ Áö¼ö¿Í ´ë¼ö ¿¬»êÀ» ºÐÇØÇÏ´Â °ÍÀÌ´Ù. ÇÔ¼ö f(x)¸¦ ´ÙÀ½°ú °°ÀÌ ºÐÇØÇÒ ¼ö ÀÖ´Ù°í Çϸé:

f(x) = f(1.m x 2e) = f1(1.m) x 2f2(e)

8 ºñÆ®ÀÇ °¡¼ö mÀ» ÀÌ¿ëÇØ¼­ f1À» 256 Ç׸ñÀÇ ÂüÁ¶ Å×À̺í·Î ±Ù»çÇϰí(approximate), f2´Â Áö¼ö e¿¡ ´ëÇÑ Á¤¼ö ¿¬»êÀ¸·Î¼­ Á÷Á¢ °è»êÇÒ ¼ö ÀÖ´Ù. º»ÁúÀûÀ¸·Î À̰ÍÀÌ Á¦°ö±Ù ¿¹¿¡¼­ ¾²¿´´ø ±â¹ýÀÌ´Ù.

´ë¼öÀû ¼ö·®È­´Â °­·ÂÇÑ µµ±¸À̳ª, ÇÔ¼ö¸¶´Ù ºñÆ®µéÀ» Á¶ÀÛÇÏ´Â ¹æ½ÄÀÌ ¼­·Î ´Ù¸¦ °æ¿ì°¡ ¸¹´Ù. ¿ÏÀüÈ÷ ÀϹÝÈ­µÈ ¹æ¹ýÀÌ Ç×»ó °¡´ÉÇÑ °ÍÀº ¾Æ´Ï³ª, ÀÌ ±Û¿¡¼­ ¼³¸íÇÑ ¹æ¹ýµéÀÌ Æ¯Á¤ÇÑ ÃÖÀûÈ­ ¹®Á¦¸¦ ÇØ°áÇÏ´Â µ¥¿¡´Â µµ¿òÀÌ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¼º´É ÃøÁ¤

Äڵ带 ÃÖÀûÈ­ÇÒ ¶§¿¡´Â ÃÖÀûÈ­ Àü°ú ÃÖÀûÈ­ ÈÄÀÇ ¼º´ÉÀ» ¼¼½ÉÇÏ°Ô ÃøÁ¤ÇØ¾ß ÇÑ´Ù. À̷лóÀ¸·Î´Â ¸ÚÁø ÃÖÀûÈ­ ±â¹ýµµ ½ÇÁ¦ ±¸Çö¿¡¼­´Â ij½ÃÀÇ Çൿ¹æ½ÄÀÌ¶ó´ø°¡ ºÐ±â ¿¹Ãø ½ÇÆÐ, ÄÄÆÄÀÏ·¯ÀÇ ¸ÛûÇÑ ÄÚµå »ý¼º °°Àº ¿äÀÎµé ¶§¹®¿¡ '¾ÈÇÏ´À´Ï¸¸ ¸øÇÑ' °á°ú¸¦ ³ºÀ» ¼ö ÀÖ´Ù. ¹º°¡¸¦ º¯°æÇß´Ù¸é Á¤¸»·Î ¼º´ÉÀÌ Çâ»óµÇ¾ú´ÂÁö¸¦ ²À ¤¾îºÁ¾ß ÇÑ´Ù.

ÄÄÆÄÀÏ·¯ ÃÖÀûÈ­ ¿É¼ÇµéÀ» Ȱ¼ºÈ­½ÃŰ´Â °Íµµ Áß¿äÇÏ´Ù. Àû´çÇÑ °÷À̶ó¸é ÀζóÀÎ ÇÔ¼öµéÀ» »ç¿ëÇÒ °Í. ¶ÇÇÑ, ÀζóÀÎ ÇÔ¼ö¸¦ »ç¿ëÇ߰ųª ÄÄÆÄÀÏ·¯ ¼³Á¤À» ¹Ù²å´Ù¸é ±× °á°ú¸¦ ÃøÁ¤ÇØ ºÁ¾ß ÇÑ´Ù.

Äڵ带 º¥Ä¡¸¶Å·ÇÒ ¶§ ÄÄÆÄÀÏ·¯ ÃÖÀûÈ­°¡ Å×½ºÆ®¿¡ ¹æÇذ¡ µÇÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. Äڵ带 µð½º¾î¼ÀºíÇØ º¸°í ÀǵµÇÑ ´ë·Î Äڵ尡 ¸¸µé¾îÁ³´ÂÁö ÀÚ¼¼È÷ Á¡°ËÇØ¾ß ÇÒ °ÍÀÌ´Ù. ŸÀ̹ÖÀÌ Áß¿äÇÑ ºÎºÐÀ̶ó¸é ·çÇÁ¸¦ µ¹·Á¼­ ½Ã°£À» ²ô´Â °Íµµ À¯¿ëÇÑ ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¯³ª ÄÄÆÄÀÏ·¯ÀÇ ÃÖÀûÈ­¿¡ ÀÇÇØ ·çÇÁ ³»ºÎ°¡ ÄÄÆÄÀÏ¿¡¼­ Á¦¿ÜµÇ¾î ¹ö¸°´Ù¸é ½Ã°£ ÃøÁ¤ °á°ú´Â ¹ÏÀ» ¼ö ¾ø°Ô µÇ¾î¹ö¸°´Ù.

ÆæÆ¼¾ö ÄÄÇ»ÅÍÀÇ °æ¿ì rdtsc(read time stamp counter) ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ÇöÀçÀÇ CPU »çÀÌŬ Ä«¿îÆ®¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ÀÎÅÚÀº ÀÌ ¸í·ÉÀÌ °á°ú¸¦ ¾ò±â ½ÃÀÛÇϱâ Àü¿¡ µÎ ¹ø ´õ ½ÇÇàµÈ´Ù°í °æ°íÇϰí ÀÖ´Ù. ÀÎÅÚÀº ¶ÇÇÑ Á» ´õ ÀϰüÀûÀΠŸÀÌ¹Ö °á°ú¸¦ ¾ò±â À§Çؼ­´Â cpuid ó·³ ¸í·É ij½Ã¸¦ ºñ¿ì´Â ¸í·ÉÀ» »ç¿ëÇϵµ·Ï ±ÇÀåÇϰí ÀÖ´Ù. Àý´ëÀû ½Ã°£À» ¾ò¾î¾ß ÇÏ´Â °æ¿ì, »çÀÌŬ Ä«¿îÆ®¸¦ ÇÁ·Î¼¼½ºÀÇ ½ÇÇà ¼Óµµ(MHz)·Î ³ª´©¸é ÃÊ ´ÜÀ§ ½Ã°£À» ¾òÀ» ¼ö ÀÖ´Ù.

¼¼¹ÐÇÑ ¼º´É ÃøÁ¤¿¡¼­ °¡Àå ½Å·ÚÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀÌ ¹Ù·Î »çÀÌŬ Ä«¿îÅ͵éÀÌ´Ù. VTuneÀ̳ª TrueTime °°Àº µµ±¸µéµµ °í¼öÁØ ÇÁ·ÎÆÄÀϸµ¿¡ À¯¿ëÇÏ´Ù(PCÀÇ °æ¿ì). ¾î¶°ÇÑ ¹êÄ¡¸¶Å·ÀÌµç ¸Þ¸ð¸® Çൿ ¹æ½ÄÀº ÃÖ´ëÇÑ ½ÇÁ¦ »óȲ°ú °°°Ô ¸¸µé¾î¾ß ÇÑ´Ù. ¸Þ¸ð¸® º´¸ñ Çö»óÀº ¿äÁò ÇÁ·Î¼¼¼­¿¡¼­ ¼º´ÉÀ» ¶³¾î¶ß¸®´Â ÁÖ¹üÀ̱⠶§¹®ÀÌ´Ù. ij½Ã ¿ª½Ã ¸¶Âù°¡ÁöÀÌ´Ù. º¥Ä¡¸¶Å©¿¡¼­ÀÇ Ä³½Ã »óÅ´ ½ÇÁ¦ »óȲ°ú ÃÖ´ëÇÑ ºñ½ÁÇØ¾ß ÇÑ´Ù. º¥Ä¡¸¶Å©ÀÇ °æ¿ì ½ÇÁ¦ ½Ã°£ ÃøÁ¤¿¡ µé¾î°¡±â Àü¿¡ ´ë»ó ¾Ë°í¸®ÁòÀ» ¸î ¹ø Á¤µµ ½ÇÇàÇØ Á༭ ij½Ã¸¦ ¹Ì¸® ä¿öµÎ´Â ¹æ¹ýµµ °í·ÁÇØ º¸±â ¹Ù¶õ´Ù. ±×·¯³ª ±×·± ¹æ¹ýÀ¸·Îµµ Ç×»ó ½ÇÁ¦ »óȲÀÌ Á¤È®ÇÏ°Ô ¹Ý¿µµÇ´Â °ÍÀº ¾Æ´Ï´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº ½ÇÁ¦·Î °ÔÀÓÀ» µ¹¸®´Â µµÁß¿¡ Á÷Á¢ ¼º´ÉÀ» ÃøÁ¤ÇÏ´Â °ÍÀÌ´Ù. Á» ´õ ½Å·ÚÇÒ ¸¸ÇÑ °á°ú¸¦ ¾ò±â À§Çؼ­´Â ÀÎÅÍ·´Æ®µéÀ» ºñȰ¼ºÈ­½ÃŰ°Å³ª, ¶Ç´Â °á°ú¸¦ ¿©·¯ ¹ø ÃßÃâÇÏ°í ºñÁ¤»óÀûÀÎ °á°ú´Â Á¦¿Ü½ÃŰ´Â µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ±Û¿¡¼­ ¾ð±ÞÇÑ ¸ðµç »çÀÌŬ °á°úµéÀº ÀÎÅÚ ÆæÆ¼¾ö II 450-MHz ÄÄÇ»ÅÍ¿¡¼­ ¾òÀº °ÍÀÌ´Ù. °¢ ¿¬»êÀº ÇϳªÀÇ ·çÇÁ ¾È¿¡¼­ 1000 ¹ø ¹Ýº¹µÇ¾úÀ¸¸ç, ±× Àü¿¡ ÇÔ¼öµéÀ» ¹Ì¸® ½ÇÇàÇØ¼­ ¸í·É ij½Ã¿Í µ¥ÀÌÅÍ Ä³½Ã¸¦ ¹Ì¸® ä¿öµÎ¾ú´Ù. »çÀÌŬ °á°ú¿¡´Â ·çÇÁ¿¡ ÀÇÇÑ Ãß°¡ºÎ´ãµµ Æ÷ÇԵǾî ÀÖ´Ù. º¥Ä¡¸¶Å©¿¡ ¾²ÀÎ ½ÇÁ¦ Äڵ尡 ºÎ·Ï CD¿¡ µé¾î ÀÖ´Ù.

ÀÌ ±Û¿¡¼­ À̾߱âÇÑ ÂüÁ¶ ±â¹ýµéÀº ÂüÁ¶ Å×À̺íÀÌ Ä³½Ã ¾È¿¡ ³²¾Æ ÀÖ´Â °æ¿ì¿¡¸¸ È¿°ú°¡ ÀÖ´Ù. ´ëü·Î ·»´õ¸µ ÆÄÀÌÇÁ¶óÀÎÀ̳ª ¿ªÇÐ(physics, ÕôùÊ) ¿£Áø ³»ºÎ ·çÇÁÀÇ °æ¿ì¶ó¸é Å×À̺íÀÌ Ä³½Ã ¹ÛÀ¸·Î ¹Ð·Á³ªÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª ÄÚµå ¿©±â Àú±â¿¡¼­ ÇÔ¼ö(Å×À̺íÀ» »ç¿ëÇÏ´Â)¸¦ È£ÃâÇÑ´Ù¸é Å×À̺íÀÌ Ä³½Ã ¹ÛÀ¸·Î ¹Ð·Á³¯ °¡´É¼ºÀÌ ¸¹´Ù. ÂüÁ¶ Å×À̺íÀ» ij½Ã ¾È¿¡ À¯Áö½Ã۱â Èûµç °æ¿ì¶ó¸é, ´ÙÇ×½Ä ±Ù»ç(polynomial approximation, Òýú£ãÒ ÐÎÞÄ. ÀÌ¿¡ ´ëÇÑ ³»¿ëÀº [Edwards00]¿¡ Àß ¼Ò°³µÇ¾î ÀÖ´Ù)ó·³ ¿¬»êÀÌ ¸¹°í ¸Þ¸ð¸® Á¢±ÙÀÌ ÀûÀº ±â¹ýÀÌ ´õ È¿À²ÀûÀÏ ¼öµµ ÀÖ´Ù.

°á·Ð

ÀÌ ±Û¿¡¼­´Â ºÎµ¿¼Ò¼öÁ¡ ÃÖÀûÈ­¶ó´Â ºù»êÀÇ Àϰ¢¸¸ÀÌ ¼Ò°³µÇ¾úÀ» »ÓÀÌ´Ù. ÀÌ ±ÛÀº ÂüÁ¶ Å×ÀÌºí ±â¹ýÀ» ÁÖ·Î ´Ù·ç°í ÀÖ´Ù. ÂüÁ¶ Å×ÀÌºí ±â¹ýÀ» »ç¿ëÇÏ¸é »ó´çÇÑ ¼º´É Çâ»óÀ» ¾òÀ» ¼öµµ ÀÖÁö¸¸, ij½ÃÀÇ ÀÛµ¿ ¹æ½ÄÀ» ÁÖÀÇÇØ¾ß Çϸç, Ç×»ó ±¸Ã¼ÀûÀÎ ¼º´É ÃøÁ¤µµ ÀØÁö ¸»¾Æ¾ß ÇÑ´Ù. ¶§·Î´Â Á» ´õ °è»êÀûÀÎ, ±×¸®°í ¸Þ¸ð¸®¸¦ ´ú °Çµå¸®´Â ¹æ¹ý(´ÙÇ×½Ä ±Ù»ç µî)À» ÅëÇØ ´õ¿í ºü¸¥ °á°ú¸¦ ¾òÀ» ¼öµµ ÀÖ´Ù. ÀÌ ±Û¿¡¼­ »ìÆì º» ±â¹ýµéÀº ¿©·¯ °¡Áö ¹æ½ÄÀ¸·Î È®Àå, °³¼±µÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ ´Ù¸¥ ±â¹ýµéµµ ޱ¸ÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¾î¶² À¯¸íÇÑ Ã¥ÀÇ Á¦¸ñ¿¡¼­Ã³·³, ÄÚµå ÃÖÀûÈ­ ±â¼ú¿¡´Â ¼±(àÉ)À̶ó´Â °ÍÀÌ Á¸ÀçÇϸç, ÀÌ ±Ûó·³ ªÀº °³¿ä¸¦ ÅëÇØ¼­´Â ¸ðµç °¡´É¼ºµéÀ» °¡´ÆÇϱⰡ ºÒ°¡´ÉÇÏ´Ù.

Âü°íÀÚ·á