ÀÌ ±ÛÀº 97³â 8 / 9¿ù ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î '±×·¡ÇÈ ¾ÖÇø®ÄÉÀ̼ǿ¡ Á¦Æ®¿£ÁøÀ» ´ÞÀÚ - °í¼Ó ±×·¡ÇÈ °è»êÀ» À§ÇÑ °íÁ¤¼Ò¼öÁ¡ ¿¬»ê'À» Âü°í·Î ÀϺΠÃß°¡, ÀϺΠ¼öÁ¤ÇÑ °Ì´Ï´Ù.(¿ÀŸµµ ÀÖ±¸, Äڵ嵵 Ʋ¸°µ¥°¡ ÀÖ´õ±º¿ä)
°í¼Ó ±×·¡ÇÈ °è»êÀ» À§ÇÑ °íÁ¤¼Ò¼öÁ¡ ¿¬»ê
- °íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ̶õ
À̹ÌÁö ó¸®, 3D ·»´õ¸µ µî ±×·¡ÇÈ ¿¬»ê¿¡¼´Â ¾ÆÁÖ ¸¹Àº ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀ» ÇÊ¿ä·Î ÇÑ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î¼¼¼´Â ¹èÁ¤µµ ºÎµ¿¼Ò¼ö°ª(double)À» IEEE754¶ó´Â ±Ô°ÝÀÇ Æ÷¸ËÀ» »ç¿ëÇØ ±â¾ïÀå¼Ò¿¡ ÀúÀåÇϴµ¥, IEEE754´Â ºÎµ¿¼Ò¼ö¸¦ Á¤¼ö ºÎºÐ°ú Áö¼ö ºÎºÐÀ¸·Î ³ª´©¾î ±â¾ïÀå¼Ò¿¡ ÀúÀåÇÑ´Ù. IEEE754´Â Àüü 62ºñÆ® Áß Ã¹ ¹øÂ° ºñÆ®¿¡´Â ºÎÈ£¸¦, µÎ ¹øÂ° ºñÆ®ºÎÅÍ 11°³ÀÇ ºñÆ®´Â 10ÀÇ ½Â¼öºÎºÐÀ», ±×¸®°í ³ª¸ÓÁö´Â À¯È¿¼ýÀÚ(mantissa)¸¦ ÀúÀåÇÏ´Â ÇüÅ·ΠµÇ¾î ÀÖ´Ù.(¿À´Ã³¯ÀÇ ÇÁ·Î¼¼¼µéÀº °ÅÀÇ ¸ðµÎ IEEE ºÎµ¿¼Ò¼ö Çü½ÄÀ» Áö¿øÇÑ´Ù.) ¿¹¸¦ µé¾î 1234.5678¶ó´Â °ªÀÌ ÀÖ´Ù¸é ÀÌ °ªÀº ´ÙÀ½°ú °°Àº ÇüÅ·Π¹Ù²ï´Ù.
1.234567 ¡¿ 10^3
ºÎµ¿¼Ò¼ö°ªÀÌ µé¾îÀÖ´Â 62ºñÆ® Áß Ã¹ ¹øÂ° ºñÆ®´Â ¾çÀÇ ºÎÈ£¸¦ ³ªÅ¸³»´Â 0, µÎ ¹øÂ°ºÎÅÍ 11°³ÀÇ ºñÆ®¿¡´Â 10ÀÇ ½Â¼öÀÎ 3, ±×¸®°í ³ª¸ÓÁö ºÎºÐ¿¡´Â À¯È¿ÀÚ¸®¼öÀÎ 1234567ÀÌ µé¾î°¡°Ô µÈ´Ù. ÀÌó·³ ÄÄÇ»ÅÍ¿¡¼ ½Ç¼öÇü ¼ýÀÚ¸¦ ÀúÀåÇÏ´Â ¹æ½ÄÀº Á¤¼öÇü¿¡ ºñÇØ ¸Å¿ì º¹ÀâÇÏ´Ù. ±×·¯´Ï ½Ç¼öÇü ¿¬»êÀÌ Á¤¼öÇü ¿¬»ê¿¡ ºñÇØ ¿¬»ê¼Óµµ°¡ ¸Å¿ì ´À¸° °ÍÀº ´ç¿¬ÇÏÁö ¾ÊÀ»±î?
±×·¡ÇÈ¿¡¼ ºÎµ¿¼Ò¼ö °è»êÀº ¾ÆÁÖ ÇʼöÀûÀÌ°í °è»ê·®ÀÌ ¸¹±â ¶§¹®¿¡ ¸¹Àº »ç¶÷µéÀÌ º¸´Ù ºü¸¥ ¹æ¹ýÀ¸·Î ºÎµ¿¼Ò¼ö¸¦ ó¸®ÇÏ´Â ¹æ¹ýÀ» °í¾ÈÇØ ³Â´Ù. ±×Áß ´ëÇ¥ÀûÀÎ °ÍÀÌ ¹Ù·Î °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀÌ´Ù. °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀ̶õ Á¤¼öÇüÀ» ÀÌ¿ëÇØ ¼Ò¼öÀÇ Á¤¼öºÎ¿Í ¼Ò¼öºÎ¸¦ ÀúÀåÇϵµ·Ï ÇÏ´Â ¼öÄ¡ÇØ¹ýÀûÀÎ ¹æ¹ýÀÌ´Ù. ´Ù½Ã ¸»ÇØ °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀ̶õ ½Ç¼öÇü ¿¬»êÀ» Á¤¼öÇü ŸÀÔÀÇ º¯¼ö¸¦ ÀÌ¿ëÇØ ¿¬»êÇÏ´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù.
<¸®½ºÆ® 1> Clock()À» ÀÌ¿ëÇÑ ¼öÇà½Ã°£ ÃøÁ¤ |
// #include<stdio.h> void main(void) start = clock(); // ½Ã°£À» ÃøÁ¤ÇÏ°í ½ÍÀº ÀÛ¾÷ !! finish = clock(); duration = (double)(finish-start) / CLOCKS_PER_SEC; |
- ¼öÇà ½Ã°£À» ÃøÁ¤ÇÏ´Â ÇÁ·ÎÆÄÀϸµ
¼Óµµ¸¦ ºü¸£°Ô ÇÏ·Á¸é °è»êÇÏ´Â ¼Óµµ¸¦ ÃøÁ¤ÇØ¾ß ÇϹǷΠÇÁ·Î±×·¥ÀÇ ¿¬»ê¼Óµµ¸¦ ÃøÁ¤Çϱâ À§ÇÑ ¹æ¹ýµéÀ» ¸ÕÀú »ìÆìº¸ÀÚ. ÇÁ·Î±×·¥ÀÇ ¼öÇà½Ã°£À» ÃøÁ¤Çϱâ À§ÇØ ¾µ ¼ö Àִ ù ¹øÂ° ¹æ¹ýÀ¸·Î clock() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ ÀÖ´Ù.
<¸®½ºÆ® 1>À» Àß »ìÆì º¸ÀÚ. clock() ÇÔ¼ö´Â ÇöÀç ½Ã½ºÅÛÀÇ Å¬·°À» ¸®ÅÏÇϴµ¥, °è»ê½Ã°£°ú ³¡³ µÚ, ÀÌ Å¬·°ÀÇ Â÷À̰ª°ú ÃÊ´ç ¸î °³ÀÇ Å¬·°ÀÌ Áö³ª°¬´ÂÁö¸¦ µûÁ®º¸¸é °è»êÇÏ´Â µ¿¾È ¾ó¸¶ÀÇ ½Ã°£ÀÌ Èê·¶´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª PCÀÇ Win32 ȯ°æ¿¡¼ ½Ã°£ °è»êÀº ÀÌ·ÐÀûÀ¸·Î 1/1000ÃʱîÁö ÃøÁ¤ÀÌ °¡´ÉÇÏÁö¸¸ ½ÇÁ¦·Î´Â 1/18ÃÊ ´ÜÀ§±îÁö¸¸ °¡´ÉÇÏ´Ù. ¶ÇÇÑ À©µµ¿ì 95³ª NT¿Í °°Àº ¸ÖƼŽºÅ· ¿î¿µÃ¼Á¦¿¡¼´Â ¼öÇàÇÒ ¶§¸¶´Ù ¾à°£¾¿ ´Ù¸£°Ô ÃøÁ¤µÇ±â ¶§¹®¿¡ ÀÌ ¹æ¹ýÀ¸·Î´Â Win32 ȯ°æ¿¡¼ÀÇ ¼öÇà½Ã°£À» Á¤È®ÇÏ°Ô ÃøÁ¤Çϱâ Èûµé´Ù. ÇÏÁö¸¸ À¯´Ð½º¿Í °°Àº ½Ã½ºÅÛ¿¡¼´Â »ó´çÈ÷ Á¤È®ÇÏ°Ô °è»êµÇ¾î Á¾Á¾ »ç¿ëµÈ´Ù.
ÀÌ·¸°Ô ÇÁ·Î±×·¥ ÀÚü¿¡¼ ½Ã°£À» ÃøÁ¤ÇÏ´Â ¹æ¹ýÀÌ À¯¿ëÇÒ ¶§µµ ÀÖÁö¸¸ º¸´Ù Á¤±³ÇÑ ÃøÁ¤À» À§Çؼ´Â ÇÁ·ÎÆÄÀϸµ(profiling)À» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ºñÁÖ¾ó C++¿¡ ±âº»À¸·Î Æ÷ÇԵŠÀÖ´Â ÇÁ·ÎÆÄÀϸµÀº °¢ ÇÔ¼öÀÇ ¼öÇà½Ã°£À» ÃøÁ¤ÇØ ÁÖ´Â µµ±¸·Î Àüü ÇÁ·Î±×·¥ÀÇ ¾î¶² ºÎºÐ¿¡ ºÎÇϰ¡ ¸¹ÀÌ °É¸®´ÂÁö¸¦ ¾Ë¾Æ³½´Ù. µû¶ó¼ Àüü ½Ã½ºÅÛÀÇ ¼öÇà¼Óµµ¸¦ ³ôÀ̰íÀÚ ÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.
ºñÁÖ¾ó C++ 4.x¿¡¼ ÇÁ·ÎÆÄÀϸµÀ» »ç¿ëÇÏ·Á¸é ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ Àü¿¡ ´ÙÀ½°ú °°Àº Á¶Ä¡¸¦ ÃëÇØ¾ß ÇÑ´Ù.(ºñÁÖ¾ó C++ 5.0 À̻󿡼´Â Project ¸Þ´º ¾Æ·¡¿¡¼ Settings...À» ¼±ÅÃÇÏ¸é µÈ´Ù.)
¡á Release ¸ðµå¸é ÇÁ·ÎÆÄÀϸµÀÌ Á¦´ë·Î µÇÁö ¾Ê±â ¶§¹®¿¡ ¹Ýµå½Ã µð¹ö±×
¸ðµå¿©¾ß ÇÑ´Ù.
¡á Build/Settings ¸Þ´º¿¡¼ Project Settings ´ÙÀ̾ó·Î±×, Link ÅÇÀ» ¼±ÅÃÇϸé
Enable ProfilingÀÌ º¸À̴µ¥, À̸¦ üũÇϰí ÄÄÆÄÀÏÇÑ´Ù.
±× ´ÙÀ½ Tools/Profile ¸Þ´º¸¦ ¼±ÅÃÇϰí 'function timming' ¶óµð¿À ¹öưÀ» ¼±ÅÃÇØ OK¸¦ ´©¸¥´Ù. ±×·¯¸é ½ÇÁ¦ ÇÁ·Î±×·¥ÀÌ µ¹¾Æ°¡¸é¼ °¢ ÇÔ¼ö¸¦ ¼öÇàÇϴµ¥ °æ°úµÈ ½Ã°£À» Output À©µµ¿ì¿¡ º¸¿©ÁØ´Ù.
<¸®½ºÆ® 2> °¢ ŸÀÔÀÇ »çÄ¢¿¬»ê¿¡ ´ëÇÑ ¼öÇà½Ã°£ ÃøÁ¤ |
#include <iostream.h> template <class T> void add() { for(register i=0; i<1000000;
i++) a+=b; } void main() DoubleLoop.add(); FloatLoop.add(); IntLoop.add(); |
<¸®½ºÆ® 2>´Â ÅÛÇø´À» ÀÌ¿ëÇØ double, float, intÀÇ Å¸ÀÔ¿¡ ´ëÇÑ »çÄ¢¿¬»êÀ» °¢°¢ ¹é¸¸ ¹ø¾¿ ¼öÇàÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. À̰ÍÀ» ÇÁ·ÎÆÄÀϸµÇØ º¸¸é Á¤¼öÇü°ú ½Ç¼öÇü ¿¬»êÀÇ ¼ÓµµÂ÷À̸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
<Ç¥ 1> ÇÁ·Î±×·¥ÀÇ ÇÁ·ÎÆÄÀϸµ °á°ú (¼ýÀÚ´Â ¿¬»ê¿¡ °É¸° ½Ã°£, ÀÛÀ»¼ö·Ï ºü¸§)
Pentium - 166 |
|||
|
int |
float |
double |
µ¡¼À |
67.5 |
88.3 |
251.9 |
»¬¼À |
76.5 |
86.2 |
280.0 |
°ö¼À |
111.8 |
441.1 |
994.8 |
³ª´°¼À |
307.3 |
481.1 |
815.3 |
ÀÌ ÇÁ·ÎÆÄÀϸµÀÇ °á°ú (<Ç¥1>)´Â ÆæÆ¼¾ö 166MHz¿¡¼ ¼öÇàÇÑ °ÍÀÌ´Ù. ÀÚ¼¼È÷ »ìÆìº¸¸é int¿Í float µÎ ŸÀÔÀÇ µ¡¼À, »¬¼ÀÀº Â÷À̰¡ °ÅÀÇ ¾øÁö¸¸ °ö¼À°ú ³ª´°¼ÀÀº È®¿¬È÷ Â÷À̰¡ ³´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. °ö¼ÀÀÇ °æ¿ì °ÅÀÇ 3.5~4¹è, ³ª´°¼ÀÀÇ °æ¿ì 1.5¹è Á¤µµ Á¤¼öÇü ¿¬»êÀÌ ºü¸£´Ù. ±×¸®°í double ŸÀÔ°ú ºñ±³ÇØ º¸¸é ÃÖ¼Ò 3¹è¿¡¼ °ö¼ÀÀÇ °æ¿ì ¹«·Á 9¹è±îÁö ¿¬»ê¼ÓµµÀÇ Â÷À̸¦ º¸À̰í ÀÖ´Ù.
¼öÇàÇÒ ¶§¿¡ µû¶ó ȤÀº ½Ã½ºÅÛ¿¡ µû¶ó ¾à°£ÀÇ Â÷À̰¡ ÀÖÁö¸¸ ÆæÆ¼¾ö ÇÁ·Î¼¼¼ÀÇ °æ¿ì int Çü°ú floatÇüÀÇ µ¡¼À°ú »¬¼À ¿¬»êÀº °ÅÀÇ Â÷À̰¡ ¾ø´Ù. ÇÏÁö¸¸ 486ÀÇ °æ¿ì´Â floatÀÇ µ¡¼À, »¬¼ÀÀÌ intÇüÀÇ °æ¿ì¿¡ ºñÇØ È®¿¬È÷ ´À¸®´Ù.
¾Õ¼ À̾߱âÇßµí °íÁ¤¼Ò¼ö ¿¬»êÀº Á¤¼öÇüÀ» ÀÌ¿ëÇØ ½Ç¼ö ¿¬»êÀ» ´ë½ÅÇÏ´Â ¹æ¹ýÀε¥, ÀÌ ½ÇÇèÀ» ÅëÇØ ¾Ë ¼ö ÀÖ´Â °Íó·³ ºÎµ¿¼Ò¼ö ¿¬»ê´ë½Å Á¤¼ö¿¬»ê¸¸ »ç¿ëÇÏ¸é ¾à 3~4.5¹è Á¤µµÀÇ ¼Óµµ Çâ»óÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù. ±¸¼º»óÀÇ ¹®Á¦ÀÌÁö¸¸ ±×º¸´Ù ÈξÀ ºü¸¥ ¼Óµµ¸¦ ¾òÀ» ¼öµµ ÀÖ´Ù.
(Âü°í·Î ´ÙÀ½ÀÇ Ç¥´Â PII - 233¿¡¼ÀÇ ÇÁ·ÎÆÄÀϸµ °á°úÀÌ´Ù.- float ÇüÀÇ °ö¼ÀÀÇ °æ¿ì int ÇüÀÇ 13.5 ¹è, ³ª´°¼ÀÀÇ °æ¿ì °ÅÀÇ 3¹è Á¤µµ Â÷À̰¡ ³´Ù.)
Pentium II - 233 |
|||
|
int |
float |
double |
µ¡¼À |
39.246 |
38.661 |
40.044 |
»¬¼À |
38.242 |
38.506 |
40.400 |
°ö¼À |
39.156 |
528.966 |
528.861 |
³ª´°¼À |
197.004 |
579.077 |
574.697 |
- °íÁ¤¼Ò¼öÁ¡ ¿¬»ê°ú Æ÷¸Ë
¿¹¸¦ µé¾î 32ºñÆ® Á¤¼öÇü º¯¼ö°¡ ÀÖ´Ù¸é À§ÂÊÀÇ 16ºñÆ®¸¦ Á¤¼ö ºÎºÐ, ¾Æ·¡ÂÊ 16ºñÆ®¸¦ ¼Ò¼öºÎºÐÀ» °¡Á¤ÇØ º¸ÀÚ. <±×¸² 1>°ú °°ÀÌ »ý°¢ÇÒ ¼ö Àִµ¥, ¿©±â¼ S´Â Á¤¼ö ºÎºÐÀÇ ºñÆ®·Î, X ºÎºÐÀº ¼Ò¼öÁ¡ ÀÌÇÏ ºÎºÐÀÇ ºñÆ®µé·Î º¼ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ¼Ò¼öÁ¡ÀÌ Á¸ÀçÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °¡»óÀ¸·Î ÀÖ´Ù°í °¡Á¤ÇÏ´Â Á¡À̶ó´Â °ÍÀ» ÀØÁö ¸»±â ¹Ù¶õ´Ù.
ÀÌÇØ¸¦ µ½±â À§ÇØ 10Áø¼ö 4ÀÚ¸®¸¦ Á¤¼öÇüÀ¸·Î »ç¿ëÇÏ´Â °¡»óÀÇ ±â°è¸¦ »ý°¢ÇØ º¸ÀÚ. ¿¹¸¦ µé¾î óÀ½ µÎ ÀÚ¸®´Â Á¤¼öºÎºÐÀÌ°í ³ªÁß µÎ ÀÚ¸®´Â ¼Ò¼ö ºÎºÐÀ̶ó¸é 0, 8, 4, 3 À̶ó°í ÀúÀåµÈ ³»¿ëÀº 8.43À» ¶æÇÏ°Ô µÇ´Â °ÍÀÌ´Ù. À̰ÍÀ» Çü½ÄÀ» ºÎ¸¦ ¶§ 2.2¶ó´Â ½ÄÀ¸·Î ºÎ¸¥´Ù. Áï, óÀ½ µÎ ÀÚ¸®°¡ Á¤¼ö ºÎºÐ, ³ªÁß µÎ ÀÚ¸®°¡ ¼Ò¼ö ºÎºÐÀ̶õ ¶æÀÌ µÈ´Ù. ±×·¸´Ù¸é 4.0Àº ¾î¶² ¶æÀÌ µÉ±î? ¼Ò¼ö ºÎºÐÀÌ ¾øÀ¸´Ï ³× ÀÚ¸® ¸ðµÎ Á¤¼ö ºÎºÐÀ̶õ ¶æÀÌ µÈ´Ù. Áï, Á¤¼öÇü º¯¼öÀÓÀ» ¶æÇÑ´Ù. ÀÌ·± ³× ÀÚ¸®¼öÀÇ »çÄ¢¿¬»ê¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
04.00 05.00
+ 03.00 - 07.00
-------- ----------
07.00 -
02.00
<±×¸² 1> 32ºñÆ® Á¤¼ö, 16.16 Æ÷¸ËÀÇ °íÁ¤¼Ò¼ö
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
S |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
´õÇϱ⠻©±â´Â ¾ÆÁÖ ½±´Ù. ±×·¯³ª °ö¼À°ú ³ª´°¼ÀÀÇ °æ¿ì´Â Á¶±Ý ¹®Á¦°¡ ÀÖ´Ù. Áï ¼Ò¼öÁ¡ÀÌ ¾ø±â ¶§¹®¿¡ °öÇÑ °á°úÀÇ ¼Ò¼ö ÀÌÇÏ ºÎºÐÀÌ È®´ëµÅ ³ªÅ¸³´Ù(ÀÌ ¹®Á¦¿¡ ´ëÇØ¼´Â µÚ¿¡¼ Á»´õ ÀÚ¼¼ÇÏ°Ô ´Ù·é´Ù).
12.34 ¡¿ 67.89 = 838.10205
1234 ¡¿ 6789 = 83810205
07.00
¡¿ 03.00 = 21.0000
M.N Æ÷¸ËÀÌ¸é µÎ ¼ö¸¦ °öÇÑ µÚ¿¡ N¹ø¸¸Å ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÏ¸é µÇ´Âµ¥, ÀÌ ¶§ Àß·Á³ª°¡´Â °ªÀÌ »ý±â°Ô µÈ´Ù.
¼·Î ´Ù¸¥ Æ÷¸Ë °£ÀÇ °íÁ¤¼Ò¼öÁ¡ ¿¬»ê¿¡µµ Àû¿ëÀÌ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î 2.30 Æ÷¸ËÀ» »ç¿ëÇÏ´Â »çÀΰª¿¡ 18.14 Æ÷¸Ë°ú °ö¼ÀÀ» ÇÏ¸é °á°ú´Â 20.44 Æ÷¸ËÀÌ µÈ´Ù. ÀÌ °á°ú¸¦ 18.14 Æ÷¸ËÀ¸·Î ¹Ù²Ù·Á¸é µÚºÎºÐ 30ºñÆ®¸¸ÅÀÇ ¼Ò¼ö ºÎºÐ°ú Á¤¼ö ºÎºÐÀÇ ³¡ºÎºÐ 2ºñÆ®¸¦ Àß¶ó³»¾ß ÇÑ´Ù.
³ª´°¼À¿¡¼´Â ¸ò°ú ³ª¸ÓÁö¸¦ ±¸ÇØ¾ß ÇÑ´Ù. 1 ³ª´©±â 3À» Çϸé 0.333 ÀÌÁö¸¸ Á¤¼ö·Î ¿¬»êÀ» ÇÏ¸é ¼Ò¼ö ÀÌÇÏ ºÎºÐÀÌ ¹ö·ÁÁ®¼ 0ÀÌ µÇ°í ¸¸´Ù. º°·Î ¹Ù¶÷Á÷ÇÑ °á°ú´Â ¾Æ´Ï´Ù. ³ª´©·Á´Â ¼ö 1¿¡ 0À» ºÙ¿© 10À» ¸¸µé°í ³ª¼ 3À¸·Î ³ª´« ´ÙÀ½ ±× °á°ú¸¦ ´Ù½Ã 10À¸·Î ³ª´«´Ù. °á°ú´Â 3ÀÌ´Ù. Áï, ³ª´©±â¸¦ Çϱâ À§ÇØ ¿ø·¡ ÇÇ¿¬»êÀÚº¸´Ù È®´ëµÈ ÇüŸ¦ ÀúÀåÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
¸¸ÀÏ 2.2 Æ÷¸ËÀÇ 1À» 4.0 Æ÷¸ËÀÇ 3À¸·Î ³ª´©¸é ¾î¶»°Ô µÉ±î? 01.00/0003. À̸é 00.33ÀÌ µÈ´Ù. ÀÌ´Â °íÁ¤¼Ò¼öÁ¡ ¿¬»ê¿¡¼µµ ½Ç¼ö¿Í Á¤¼ö ¿¬»êÀº ½Ç¼ö°¡ µÈ´Ù´Â Á¡À» º¸¿©ÁØ´Ù. °íÁ¤¼Ò¼ö ¼ýÀÚ¸¦ °íÁ¤¼Ò¼ö·Î ³ª´©·Á¸é, ¿¹¸¦ µé¾î 2ÀÚ¸® ¼Ò¼ö ºÎºÐÀ» ¾òÀ¸·Á¸é ÇÇÁ¬¼ö¸¦ µÎ ¹ø ¿ÞÂÊÀ¸·Î À̵¿½ÃÄÑ¾ß ÇÑ´Ù.
0100/0300 = 0000
01000/0300 = 0003
010000/0300 = 0033
Áö±Ý±îÁö ¼³¸íÇß´ø ³»¿ëÀ» Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.
¡á °á°úÀÇ ÀÚ¸®¼ö´Â °öÇØÁö´Â µÎ ¼öÀÇ ÀÚ¸®¼ö¸¦ ´õÇÑ °Íº¸´Ù À۰ųª
°°´Ù.
¡á °á°úÀÇ ¼Ò¼ö ÀÚ¸®¼ö´Â µÎ ¼öÀÇ ¼Ò¼ö ºÎºÐ ÀÚ¸®¼ö¸¦ ´õÇÑ °Í°ú °°´Ù.
¡á Á¤¼ö¶ó´Â °ÍÀº ¼Ò¼ö ºÎºÐÀÌ ¾ø´Ù(4.0°íÁ¤ ¼Ò¼öÁ¡).
32ºñÆ® ȯ°æÀ̶ó¸é ÀϹÝÀûÀ¸·Î 16.16À» »ç¿ëÇϰÚÁö¸¸ ¿À¹öÇÃ·Î¿ì µîÀ» ¸·°í º¸´Ù Å« °ªÀ» ÀúÀåÇÏ·Á¸é 17.15 ³ª 18.14 Æ÷¸ËÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
ÀÌ ¿Ü¿¡µµ ´Ù¾çÇÑ Æ÷¸ËÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î 0°ú 1 »çÀÌÀÇ °ªÀ» ¾ÆÁÖ Á¤¹ÐÇÏ°Ô Ç¥½ÃÇϱâ À§ÇØ 1.31 Æ÷¸ËÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
¶Ç Çϳª °í·ÁÇÒ °ÍÀÌ Àִµ¥, 64ºñÆ® Á¤¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â »óȲÀ̶ó¸é 8.8 À̳ª 8.16 °ú °°Àº Æ÷¸Ëµµ °í·ÁÇØ º¼¸¸ÇÏ´Ù. ƯÈ÷ À©µµ¿ì 3.1°ú °°Àº 16ºñÆ® ȯ°æ¿¡¼´Â À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ºñÁÖ¾ó C++¿¡¼´Â __int32¿Í __int64¶õ ŸÀÔÀ» Áö¿øÇϰí ÀÖ¾î 32ºñÆ® Á¤¼öÇü°ú 64ºñÆ® Á¤¼öÇüÀ» ÀÚÀ¯·Ó°Ô ¾µ ¼ö ÀÖ´Ù.
À̻󿡼 ©¸·ÇÏ°Ô »ìÆì º» ¸î °¡Áö ¹®Á¦Á¡Àº µÚ¿¡¼ Á» ´õ ÀÚ¼¼È÷ ´Ù·çµµ·Ï Çϰí, ½ÇÁ¦ 32ºñÆ®·Î ¸¸µé¾îÁø 16.16 Æ÷¸ËÀ» ¾î¶»°Ô ±¸ÇöÇÏ°í »ç¿ëÇÏ´ÂÁö ¾Ë¾Æº¸ÀÚ.
- Fixed ŸÀÔ°ú int, double »çÀÌÀÇ º¯È¯
°£´ÜÇÏ°Ô ´ÙÀ½°ú °°Àº »õ·Î¿î ŸÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
typedef __int32 Fixed;
Á¤¼öÇü°ªÀ» Fixed ŸÀÔÀ¸·Î ¹Ù²Ù·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. __int32´Â 32ºñÆ® Á¤¼öÇüÀ¸·Î ºñÁÖ¾ó C++¿¡¼ ±âº»À¸·Î Á¦°øÇϴ ŸÀÔÀÌ´Ù. int³ª longÀ¸·Î ¹Ù²Ù¾î ½áµµ ¸¶Âù°¡Áö´Ù.
Fixed fix;
int iValue = 123;
fix = (Fixed)(iValue <<
16);
½Ç¼öÇü°ªÀ» fixed·Î ¹Ù²Ù·Á¸é 16ÀÚ¸®¸¸Å ¿ÞÂÊÀ¸·Î À̵¿ÇÑ´Ù. Áï 65536À» °öÇÑ °ªÀÌ µÈ´Ù. ½Ç¼öÇüÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î 65536À» °öÇÏ¸é µÈ´Ù. À̶§´Â ½ÃÇÁÆ® ¿¬»êÀ» ¾²Áö ¸øÇÑ´Ù.
Fixed fix;
double dValue = 123.0f;
fix = (Fixed)(dValue
* 65536.0);
°Å²Ù·Î Fixed ŸÀÔÀÇ Á¤¼ö¸¦ int³ª doubleÇüÀ¸·Î ¹Ù²Ù·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
double dValue;
dValue = ((double)fix) / 65536.0;
int iValue;
iValue = fix >> 16;
- Fixed ŸÀÔÀÇ »çÄ¢¿¬»ê
Fixed ŸÀÔ º¯¼öÀÇ µ¡¼À°ú »¬¼ÀÀº int ³ª double°ú °°Àº ±âº»ÀûÀΠŸÀÔ°ú ¶È°°´Ù.
Fixed fix1, fix2, fix3;
fix3 = fix1 + fix2;
fix3 = fix1 -
fix2;
µ¡¼À, »¬¼ÀÀº ¾Æ¹«·± ¹®Á¦°¡ ¾øÁö¸¸ °ö¼ÀÀÇ °æ¿ì´Â Á» ´Ù¸£´Ù.
Fixed fix1, fix2, fix3;
fix3 = fix1 * fix2;
ÀÌ °æ¿ì fix1°ú fix2´Â °¢°¢ÀÇ ¼ö¿¡ 65536ÀÌ °öÇØÁø ¼ö¸¦ ´Ù½Ã °öÇϹǷΠºñ·ÊÈ®´ë°¡ ÀϾÙ. ÀÌ Á¤¼öÇüÀÌ 2.2 Æ÷¸ËÀÇ °íÁ¤¼Ò¼ö·Î µÅ ÀÖ´Ù¸é, µ¡¼ÀÀÇ °æ¿ì 12.0 + 4.6Àº ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµÉ ¼ö ÀÖ´Ù.
1200 12.00
+ 0460 +
4.60
-------- --------
1660 16.60
±×·¯³ª °öÇϱ⠿¬»êÀÇ °æ¿ì´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù.
1200 12.00
x 0460 x
4.60
-------- --------
552000 55.2000
Áï, µÎ ¼ö¸¦ °öÇÏ¸é °á°ú°¡ 4ÀÚ¸®¼ö¸¦ ³ÑÀ¸¸é¼(¿À¹öÇ÷οì), ¼Ò¼ö ºÎºÐ ÀÚ¸®¼ö°¡ 4ÀÚ¸®°¡ µÈ´Ù(ÀÌ·± Çö»óÀ» 'ºñ·ÊÈ®´ë'¶ó ÇÑ´Ù). µû¶ó¼ °è»êÇÑ µÚ¿¡ ȤÀº °è»êÇϱâ Àü¿¡ ´ÙÀ½°ú °°ÀÌ ¼Ò¼ö ºÎºÐÀÇ ÀÚ¸®¸¦ À̵¿½ÃÄÑ ÁÖ¾î¾ß ÇÑ´Ù.
fix3 = (fix1 * fix2) >> 16; //
¨ç
fix3 = (fix1>>16 * fix2); //
¨è
±×·¯³ª ¿©±â¿¡µµ ¹®Á¦°¡ ÀÖ´Ù. ÀÌ Äڵ忡¼ ¨çÀÇ °æ¿ì 32ºñÆ® Á¤¼öÇüÀ» °öÇÏ´Â °úÁ¤¿¡¼ ¿À¹öÇ÷ο찡 »ý±ä´Ù. ÃÖ¾ÇÀÇ °æ¿ì¿¡ 32ºñÆ® ¼ýÀÚÀÇ °öÀº 64ºñÆ® °á°ú¸¦ ¸¸µç´Ù(ÇÇ¿¬»êÀÚ µÑ Áß Çϳª°¡ 1.0º¸´Ù Å©¸é Ç×»ó ¿À¹öÇ÷ο찡 »ý±ä´Ù).
¨è ÀÇ °æ¿ì´Â °ö¼ÀÀ» Çϱâ Àü¿¡ ÀÚ¸®¼ö¸¦ À̵¿½ÃŰÁö¸¸ fix1ÀÇ ¼Ò¼ö ºÎºÐÀ» ¸ðµÎ ¾ø¾Ö¹Ç·Î Á¤È®¼ºÀÌ °¨¼ÒÇÏ°Ô µÈ´Ù. Á¤È®¼ºÀ» ¾î´À Á¤µµ À¯ÁöÇÏ¸é¼ ¿À¹öÇ÷ο츦 ¸·À» ¼ö ÀÖµµ·Ï fix1, fix2ÀÇ µÎ ¼ö¸¦ °¢°¢ 8ºñÆ®¸¸Å¾¿ ¿À¸¥ÂÊÀ¸·Î ½ÃÇÁÆ®ÇÑ ÈÄ °öÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
fix3 = (fix1 >>8) ¡¿ (fix2>>8);
±×·¯³ª °¡Àå Á¤È®ÇÑ ¹æ¹ýÀº 32ºñÆ® Á¤¼öÇüÀ» °öÇÒ ¶§ 64ºñÆ® Á¤¼öÇü °ö¼ÀÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. 64ºñÆ® Á¤¼öÇü °ö¼À ¿¬»êÀº floatº¸´Ù 2¹è,double º¸´Ù 3¹è ÀÌ»ó ºü¸£´Ù.
³ª´°¼ÀÀÇ °æ¿ìµµ °ö¼ÀÀÇ °æ¿ì¿Í ºñ½ÁÇÏ´Ù.
fix3 = (fix1<<16) / fix2;
fix3 = (fix1<<8) / (fix2<<8);
ÀÌ¿Í °°ÀÌ ¾µ ¼ö ÀÖÁö¸¸ ½ÃÇÁÆ®ÇÏ´Â µµÁß¿¡ fix1¿¡ ÀúÀåµÈ Á¤¼ö°ªÀÇ ÀϺθ¦ ÀÒ¾î¹ö¸± ¼ö Àֱ⠶§¹®¿¡ º°·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ³ª´°¼ÀÀÇ °æ¿ìµµ °ö¼À°ú ¸¶Âù°¡Áö·Î 64ºñÆ®¿¬»êÀ» »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
- °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀÇ Á¤¹Ðµµ
°íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇÏ¸é °æ¿ì¿¡ µû¶ó 4¹èÀÌ»ó ºü¸¥ °è»ê¼Óµµ¸¦ ¾òÀ» ¼ö ÀÖ´Ù(ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê ÇÁ·Î¼¼¼°¡ ¾ø´Â 386DX¿Í °°Àº ÇÁ·Î¼¼¼¿¡¼´Â 11¹è ÀÌ»óÀÇ ¼Óµµ Â÷À̸¦ ³»±âµµ ÇÑ´Ù)´Â °ÍÀ» ¾Õ¿¡¼ ÀÌ¹Ì ¹àÈù ¹Ù ÀÖ´Ù.
±×·¸´Ù¸é °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀÇ Á¤¹Ðµµ´Â ¾î¶³±î? ¹°·Ð float, double°ú °°Àº ºÎµ¿¼Ò¼ö¸¦ »ç¿ëÇÏ´Â °Í¿¡ ºñÇØ °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀº °è»êÀÇ Á¤¹Ðµµ¸¦ ¶³¾î¶ß¸°´Ù. ±×·¯³ª °á·ÐºÎÅÍ À̾߱âÇÏÀÚ¸é °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀÇ Á¤¹Ðµµ´Â ±×´ÙÁö ¿ì·ÁÇÒ ¸¸ÇÑ °ÍÀÌ ¾Æ´Ï´Ù. ¿ÀÈ÷·Á Á¤¹Ðµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù.
¾Õ¿¡¼ °íÁ¤ ¼Ò¼öÁ¡À» Ç¥ÇöÇϱâ À§ÇØ Á¤¼ö¿Í ¼Ò¼ö ºÎºÐÀÇ ÀÚ¸®¼ö¸¦ ¹èÁ¤ÇÏ¿© M.NÀ̶ó´Â Æ÷¸ËÀ» »ç¿ëÇß´Ù. MÀº Á¤¼ö ºÎºÐ, NÀº ¼Ò¼ö ÀÌÇÏ ºÎºÎ´É¤© ³ªÅ¸³»´Â µ¥ »ç¿ëµÇ´Â ºñÆ®¼öÀ̸ç, int°¡ 32ºñÆ®ÀÎ ±â°èÀÇ °æ¿ì M°ú NÀ» ´õÇѼö´Â Ç×»ó 32°¡ µÇ°Ô ÇÑ´Ù. 16.16Æ÷¸ËÀ» ±âÁØÀ¸·Î °íÁ¤¼Ò¼öÁ¡ÀÇ Á¤¹Ðµµ¿¡ ´ëÇØ »ý°¢ÇØ º¸ÀÚ. 16.16Æ÷¸ËÀº Á¤¼öºÎºÐÀÌ 16ºñÆ®, ¼Ò¼ö ºÎºÐÀÌ 16ºñÆ®·Î °¢°¢ ÇÒ´çµÇ¾î ÀÖ´Â ÇüÅÂÀÌ´Ù. Á¤¼ö ºÎºÐÀÇ 16ºñÆ®·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â °ªÀÇ ¹üÀ§´Â
ºÎÈ£°¡ ¾ø´Ù°í °¡Á¤Çϸé(Áï, unsigned·Î Ãë±Þ) : 0 ~ 2^16 - 1
ºÎÈ£°¡ ÀÖ´Ù°í °¡Á¤Çϸé(Áï, signed·Î Ãë±Þ) : -2^15 ~ +2^15 - 1
ÀÌ µÈ´Ù. ºÎÈ£°¡ À־ °ªÀ» ´Ù·ç´Âµ¥ ÃæºÐÇϹǷΠ¿©±â¼ ºÎÈ£°¡ ¾ø´Â ÇüÅ´ »ý°¢ÇÏÁö ¾Ê±â·Î ÇÑ´Ù. Áï, -32768 ~ +32767±îÁöÀÇ °ªÀÇ ¹üÀ§¸¦ °¡Áø´Ù. ÀϹÝÀûÀ¸·Î ±×·¡ÇÈ Ç¥½ÃÀåÄ¡°¡ 1280¡¿1280ÀÇ ¹üÀ§¸¦ ³Ñ¾î¼Áö ¾ÊÀ¸¹Ç·Î ÀÌ Á¤µµÀÇ ¹üÀ§´Â ±×·¡ÇÈ¿¡¼ ÁÂÇ¥°è·Î »ç¿ëÇϱ⿡ ÃæºÐÇÑ ¹üÀ§ÀÌ´Ù.
ÀÌÁ¦ ¼Ò¼ö ºÎºÐÀ» »ý°¢ÇØ º¸ÀÚ. ¼Ò¼ö ºÎºÐÀº 2^n (nÀº¼Ò¼ö ÀÌÇÏ ÀÚ¸®¼ö)·Î ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î 2Áø¼ö 0.011·Î Ç¥½ÃµÈ °ÍÀº
0.011 = 0 x 2^(0) + 0 x 2^(-1) + 1 x 2^(-2) + 1 x 2^(-3) = 0 + 0 + 0.25 + 0.125 = 0.375
·Î ´Ù½Ã ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¼Ò¼ö ºÎºÐÀ» ³ªÅ¸³»±â À§ÇØ 16ºñÆ®¸¦ »ç¿ëÇϸé 1/2^(16) = 1/65536 = 0.0000153ÀÇ Á¤¹Ðµµ¸¦ °¡Áø´Ù. ´Ù¸¥ ¿¹·Î ¸¸ÀÏ 18.14 Æ÷¸ËÀ» »ç¿ëÇÑ´Ù¸é ¼Ò¼ö ÀÌÇÏ Á¤¹Ðµµ´Â 1/2^(14) = 1/16384 = 0.000061 ÀÌ µÈ´Ù.
ÀϹÝÀûÀ¸·Î float ŸÀÔÀ» °¡Áö°í ¿¬»êÇÒ ¶§ ¼Ò¼ö 6ÀÚ¸® ÀÌÇÏÀÇ Á¤¹Ðµµ´Â ½Å·ÚÇÒ ¼ö ¾ø´Â °ÍÀ¸·Î ¿©±ä´Ù. ÀÌ·± »ç½ÇÀ» ³õ°í º¼ ¶§, 16.16 Æ÷¸ËÀÇ °íÁ¤¼Ò¼öÁ¡ ¿¬»êÀÇ Á¤¹Ðµµ´Â ¼Ò¼ö ÀÌÇÏ 5ÀÚ¸®±îÁö Á¤¹Ðµµ¸¦ º¸ÀåÇϹǷΠfloat ŸÀÔÀÇ ¿¬»ê¿¡ ¸øÁö ¾Ê°Ô »ó´çÈ÷ Á¤¹ÐÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù. ÀÌ ±Û¿¡¼´Â ÁÖ·Î 16.16 Æ÷¸ËÀ» »ç¿ëÇÏ¿´À¸³ª ÇÁ·Î±×·¡¸ÓÀÇ Çʿ信 µû¶ó Á¤¼ö ºÎºÐÀÌ ¸¹ÀÌ ÇÊ¿äÇϸé 18.14 Æ÷¸ËÀ̳ª 24.8 Æ÷¸ËÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, °Å²Ù·Î ¾ÆÁÖ ¼¼¹ÐÇÑ Á¤¹Ðµµ°¡ ¿ä±¸µÇ¾î ¼Ò¼ö ÀÌÇÏ ºÎºÐÀÌ ¸¹ÀÌ ÇÊ¿äÇϸé 14.18 Æ÷¸ËÀ̳ª 8.24 Æ÷¸ËÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. M°ú NÀ» ¾î¶»°Ô Á¤ÇÏ´ÂÁö´Â ÀüÀûÀ¸·Î ÇÁ·Î±×·¡¸Ó¿¡°Ô ´Þ·ÁÀÖ´Ù. Áï °íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÌÁ¡À» ¾òÀ» ¼ö ÀÖ´Ù.
ù°, float ŸÀÔÀ» ÀÌ¿ëÇÏ´Â °Íº¸´Ù ºü¸¥ °è»ê¼Óµµ¸¦ º¸ÀåÇØ ÁÖ¸ç,
µÑ°, Á¤¹Ðµµµµ float ŸÀÔÀ» »ç¿ëÇÏ´Â °Í¿¡ ¸øÁö ¾Ê°í,
¼Â°, ¼Ò¼ö ÀÌÇÏ ºÎºÐ Á¤¹ÐµµÀÇ ¹üÀ§¸¦ ÇÁ·Î±×·¡¸Ó°¡ Á¤ÇÒ ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ »ç½ÇÀÌ ±×·¡ÇÈ ¿¬»ê¿¡¼ °íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇØ¾ß ÇÏ´Â ÁÁÀº ÀÌÀ¯°¡ µÈ´Ù.