ÀÌ ±ÛÀº 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>
    #include<stdlib.h>
    #include<time.h>

    void main(void)
    {
       clock_t start, finish;
       double duration;

       start = clock();

       // ½Ã°£À» ÃøÁ¤ÇÏ°í ½ÍÀº ÀÛ¾÷ !!
       // double a, b, c;
       // for(int i=0; i<6000000; i++)
       //   c = a+b;

       finish = clock();

       duration = (double)(finish-start) / CLOCKS_PER_SEC;
       printf("%2.1f seconds\n", duration);
    }

 

- ¼öÇà ½Ã°£À» ÃøÁ¤ÇÏ´Â ÇÁ·ÎÆÄÀϸµ

 ¼Óµµ¸¦ ºü¸£°Ô ÇÏ·Á¸é °è»êÇÏ´Â ¼Óµµ¸¦ ÃøÁ¤ÇØ¾ß ÇϹǷΠÇÁ·Î±×·¥ÀÇ ¿¬»ê¼Óµµ¸¦ ÃøÁ¤Çϱâ À§ÇÑ ¹æ¹ýµéÀ» ¸ÕÀú »ìÆìº¸ÀÚ. ÇÁ·Î±×·¥ÀÇ ¼öÇà½Ã°£À» ÃøÁ¤Çϱâ À§ÇØ ¾µ ¼ö Àִ ù ¹øÂ° ¹æ¹ýÀ¸·Î 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>
    class ClacTime
    {
            T a, b, c;
    public :
        ClacTime() { a = (T)123456, b = (T)123456; }

        void add() { for(register i=0; i<1000000; i++) a+=b; }
        void sub() { for(register i=0; i<1000000; i++) a-=b; }
        void mul() { for(register i=0; i<1000000; i++) a*=b; }
     
        void div() { for(register i=0; i<1000000; i++) a/=b; }
    };

    void main()
    {
        ClacTime <double> DoubleLoop;
        ClacTime <float> FloatLoop;
        ClacTime <int> IntLoop;

        DoubleLoop.add();
        DoubleLoop.sub();
        DoubleLoop.mul();
        DoubleLoop.div();

        FloatLoop.add();
        FloatLoop.sub();
        FloatLoop.mul();
        FloatLoop.div();

        IntLoop.add();
        IntLoop.sub();
        IntLoop.mul();
        IntLoop.div();
    }

 

 <¸®½ºÆ® 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Àº ¾î¶² ¶æÀÌ µÉ±î? ¼Ò¼ö ºÎºÐÀÌ ¾øÀ¸´Ï ³× ÀÚ¸® ¸ðµÎ Á¤¼ö ºÎºÐÀ̶õ ¶æÀÌ µÈ´Ù. Áï, Á¤¼öÇü º¯¼öÀÓÀ» ¶æÇÑ´Ù. ÀÌ·± ³× ÀÚ¸®¼öÀÇ »çÄ¢¿¬»ê¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

 

 ´õÇϱ⠻©±â´Â ¾ÆÁÖ ½±´Ù. ±×·¯³ª °ö¼À°ú ³ª´°¼ÀÀÇ °æ¿ì´Â Á¶±Ý ¹®Á¦°¡ ÀÖ´Ù. Áï ¼Ò¼öÁ¡ÀÌ ¾ø±â ¶§¹®¿¡ °öÇÑ °á°úÀÇ ¼Ò¼ö ÀÌÇÏ ºÎºÐÀÌ È®´ëµÅ ³ªÅ¸³­´Ù(ÀÌ ¹®Á¦¿¡ ´ëÇØ¼­´Â µÚ¿¡¼­ Á»´õ ÀÚ¼¼ÇÏ°Ô ´Ù·é´Ù).

 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ÀÚ¸® ¼Ò¼ö ºÎºÐÀ» ¾òÀ¸·Á¸é ÇÇÁ¬¼ö¸¦ µÎ ¹ø ¿ÞÂÊÀ¸·Î À̵¿½ÃÄÑ¾ß ÇÑ´Ù.

 Áö±Ý±îÁö ¼³¸íÇß´ø ³»¿ëÀ» Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.

 ¡á °á°úÀÇ ÀÚ¸®¼ö´Â °öÇØÁö´Â µÎ ¼öÀÇ ÀÚ¸®¼ö¸¦ ´õÇÑ °Íº¸´Ù À۰ųª °°´Ù.
 ¡á °á°úÀÇ ¼Ò¼ö ÀÚ¸®¼ö´Â µÎ ¼öÀÇ ¼Ò¼ö ºÎºÐ ÀÚ¸®¼ö¸¦ ´õÇÑ °Í°ú °°´Ù.
 ¡á Á¤¼ö¶ó´Â °ÍÀº ¼Ò¼ö ºÎºÐÀÌ ¾ø´Ù(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 »çÀÌÀÇ º¯È¯

 °£´ÜÇÏ°Ô ´ÙÀ½°ú °°Àº »õ·Î¿î ŸÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

 Á¤¼öÇü°ªÀ» Fixed ŸÀÔÀ¸·Î ¹Ù²Ù·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. __int32´Â 32ºñÆ® Á¤¼öÇüÀ¸·Î ºñÁÖ¾ó C++¿¡¼­ ±âº»À¸·Î Á¦°øÇϴ ŸÀÔÀÌ´Ù. int³ª longÀ¸·Î ¹Ù²Ù¾î ½áµµ ¸¶Âù°¡Áö´Ù.

 ½Ç¼öÇü°ªÀ» fixed·Î ¹Ù²Ù·Á¸é 16ÀÚ¸®¸¸Å­ ¿ÞÂÊÀ¸·Î À̵¿ÇÑ´Ù. Áï 65536À» °öÇÑ °ªÀÌ µÈ´Ù. ½Ç¼öÇüÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î 65536À» °öÇÏ¸é µÈ´Ù. À̶§´Â ½ÃÇÁÆ® ¿¬»êÀ» ¾²Áö ¸øÇÑ´Ù.

 °Å²Ù·Î Fixed ŸÀÔÀÇ Á¤¼ö¸¦ int³ª doubleÇüÀ¸·Î ¹Ù²Ù·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

- Fixed ŸÀÔÀÇ »çÄ¢¿¬»ê

 Fixed ŸÀÔ º¯¼öÀÇ µ¡¼À°ú »¬¼ÀÀº int ³ª double°ú °°Àº ±âº»ÀûÀΠŸÀÔ°ú ¶È°°´Ù.

 µ¡¼À, »¬¼ÀÀº ¾Æ¹«·± ¹®Á¦°¡ ¾øÁö¸¸ °ö¼ÀÀÇ °æ¿ì´Â Á» ´Ù¸£´Ù.

Fixed fix1, fix2, fix3;
fix3 = fix1 * fix2;

 ÀÌ °æ¿ì fix1°ú fix2´Â °¢°¢ÀÇ ¼ö¿¡ 65536ÀÌ °öÇØÁø ¼ö¸¦ ´Ù½Ã °öÇϹǷΠºñ·ÊÈ®´ë°¡ ÀϾ´Ù. ÀÌ Á¤¼öÇüÀÌ 2.2 Æ÷¸ËÀÇ °íÁ¤¼Ò¼ö·Î µÅ ÀÖ´Ù¸é, µ¡¼ÀÀÇ °æ¿ì 12.0 + 4.6Àº ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµÉ ¼ö ÀÖ´Ù.

±×·¯³ª °öÇϱ⠿¬»êÀÇ °æ¿ì´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù.

 Áï, µÎ ¼ö¸¦ °öÇÏ¸é °á°ú°¡ 4ÀÚ¸®¼ö¸¦ ³ÑÀ¸¸é¼­(¿À¹öÇ÷οì), ¼Ò¼ö ºÎºÐ ÀÚ¸®¼ö°¡ 4ÀÚ¸®°¡ µÈ´Ù(ÀÌ·± Çö»óÀ» 'ºñ·ÊÈ®´ë'¶ó ÇÑ´Ù). µû¶ó¼­ °è»êÇÑ µÚ¿¡ ȤÀº °è»êÇϱâ Àü¿¡ ´ÙÀ½°ú °°ÀÌ ¼Ò¼ö ºÎºÐÀÇ ÀÚ¸®¸¦ À̵¿½ÃÄÑ ÁÖ¾î¾ß ÇÑ´Ù.

 ±×·¯³ª ¿©±â¿¡µµ ¹®Á¦°¡ ÀÖ´Ù. ÀÌ Äڵ忡¼­ ¨çÀÇ °æ¿ì 32ºñÆ® Á¤¼öÇüÀ» °öÇÏ´Â °úÁ¤¿¡¼­ ¿À¹öÇ÷ο찡 »ý±ä´Ù. ÃÖ¾ÇÀÇ °æ¿ì¿¡ 32ºñÆ® ¼ýÀÚÀÇ °öÀº 64ºñÆ® °á°ú¸¦ ¸¸µç´Ù(ÇÇ¿¬»êÀÚ µÑ Áß Çϳª°¡ 1.0º¸´Ù Å©¸é Ç×»ó ¿À¹öÇ÷ο찡 »ý±ä´Ù).

 ¨è ÀÇ °æ¿ì´Â °ö¼ÀÀ» Çϱâ Àü¿¡ ÀÚ¸®¼ö¸¦ À̵¿½ÃŰÁö¸¸ fix1ÀÇ ¼Ò¼ö ºÎºÐÀ» ¸ðµÎ ¾ø¾Ö¹Ç·Î Á¤È®¼ºÀÌ °¨¼ÒÇÏ°Ô µÈ´Ù. Á¤È®¼ºÀ» ¾î´À Á¤µµ À¯ÁöÇϸ鼭 ¿À¹öÇ÷ο츦 ¸·À» ¼ö ÀÖµµ·Ï fix1, fix2ÀÇ µÎ ¼ö¸¦ °¢°¢ 8ºñÆ®¸¸Å­¾¿ ¿À¸¥ÂÊÀ¸·Î ½ÃÇÁÆ®ÇÑ ÈÄ °öÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

 ±×·¯³ª °¡Àå Á¤È®ÇÑ ¹æ¹ýÀº 32ºñÆ® Á¤¼öÇüÀ» °öÇÒ ¶§ 64ºñÆ® Á¤¼öÇü °ö¼ÀÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. 64ºñÆ® Á¤¼öÇü °ö¼À ¿¬»êÀº floatº¸´Ù 2¹è,double º¸´Ù 3¹è ÀÌ»ó ºü¸£´Ù.

 ³ª´°¼ÀÀÇ °æ¿ìµµ °ö¼ÀÀÇ °æ¿ì¿Í ºñ½ÁÇÏ´Ù.

 ÀÌ¿Í °°ÀÌ ¾µ ¼ö ÀÖÁö¸¸ ½ÃÇÁÆ®ÇÏ´Â µµÁß¿¡ 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·Î Ç¥½ÃµÈ °ÍÀº

·Î ´Ù½Ã ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¼Ò¼ö ºÎºÐÀ» ³ªÅ¸³»±â À§ÇØ 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À» ¾î¶»°Ô Á¤ÇÏ´ÂÁö´Â ÀüÀûÀ¸·Î ÇÁ·Î±×·¡¸Ó¿¡°Ô ´Þ·ÁÀÖ´Ù. Áï °íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÌÁ¡À» ¾òÀ» ¼ö ÀÖ´Ù.

 ÀÌ·¯ÇÑ »ç½ÇÀÌ ±×·¡ÇÈ ¿¬»ê¿¡¼­ °íÁ¤ ¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇØ¾ß ÇÏ´Â ÁÁÀº ÀÌÀ¯°¡ µÈ´Ù.