18-1-¶ó.ºÎµ¿ ¼Ò¼öÁ¡

½Ç¼ö´Â ¼Ò¼öÁ¡ ÀÌÇÏÀÇ ¼ö¸¦ °¡Áö±â ¶§¹®¿¡ Á¤¼ö¿¡ ºñÇØ ÈξÀ ´õ º¹ÀâÇÏ´Ù. ÀÌ·± º¹ÀâÇÑ ½Ç¼ö¸¦ ºñÆ®ÀÇ ¼¼°è¿¡¼­ ¾î¶»°Ô Ç¥ÇöÇÒ ¼ö ÀÖÀ»Áö »ý°¢ÇØ º¸ÀÚ. ½Ç¼ö´Â ºÎÈ£, Á¤¼öºÎ, ¼Ò¼öºÎ·Î ±¸¼ºµÇ¹Ç·Î °¢ ¿ä¼Ò¿¡ Àû´ç·®ÀÇ ºñÆ®¸¦ ÇÒ´çÇÏ´Â ´Ü¼øÇÑ ¹æ¹ýÀ» ¿ì¼± »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù. ½Ç¼ö -3.14´Â À½¼ö ºÎÈ£¿Í Á¤¼öºÎ 3, ¼Ò¼öºÎ .14·Î ±¸¼ºµÇ¹Ç·Î ÀÌ ¼ÂÀ» °¢°¢ÀÇ ºñÆ®¿¡ ÀúÀåÇÏ´Â ¹æ½ÄÀÌ´Ù. ´ÙÀ½Àº 32ºñÆ® ±æÀÌ·Î ½Ç¼ö¸¦ Ç¥ÇöÇÏ´Â ¾à¼ÓÀÇ ÇÑ ¿¹ÀÌ´Ù.

32ºñÆ®¸¦ À߶ó ºÎÈ£¿¡ 1ºñÆ®, Á¤¼öºÎ¿¡ 15ºñÆ®, ¼Ò¼öºÎ¿¡ 16ºñÆ®¸¦ ÇÒ´çÇß´Ù. ÀÌ ±¸Á¶·Î ÀÏ´Ü ½Ç¼ö¸¦ Ç¥ÇöÇÒ ¼ö´Â ÀÖÁö¸¸ Á¤¼öºÎ¿Í ¼Ò¼öºÎÀÇ ÀÚ¸®¼ö°¡ ±×´ÙÁö Å©Áö ¾Ê±â ¶§¹®¿¡ Ç¥Çö ¹üÀ§°¡ ³ÐÁö ¸øÇÏ´Ù. Á¤¼öºÎÀÇ ÃÖ´ë Àý´ë°ªÀº ±â²¯ÇØ¾ß 32767¹Û¿¡ ¾ÈµÇ¾î ½Ç»ýÈ°¿¡ »ç¿ëµÇ´Â ¼ö¸¦ Ç¥ÇöÇϱ⿡´Â Åεµ ¾øÀÌ ºÎÁ·ÇÏ¸ç ¼Ò¼öºÎµµ 65535ÀÌ»óÀ» Ç¥ÇöÇÒ ¼ö ¾øÀ¸¹Ç·Î Á¤¹Ðµµ°¡ 10Áø¼ö·Î ¼Ò¼öÁ¡ ÀÌÇÏ ´Ù¼¸ ÀÚ¸®µµ ¾ÈµÈ´Ù.

ÀÌ Á¤µµ ¹üÀ§¿Í Á¤¹Ðµµ¸¦ °¡Áö°í´Â Á¤¹ÐÇÑ °úÇÐ, °øÇпë ÇÁ·Î±×·¥Àº ¹°·ÐÀÌ°í °£´ÜÇÑ ¼ºÀû ó¸® ÇÁ·Î±×·¥¿¡µµ ºÎÀûÇÕÇÏ´Ù. 32ºñÆ®°¡ ¾Æ´Ñ 64ºñÆ®·Î ±æÀ̸¦ ´Ã¸°´Ù¸é À̺¸´Ù ´õ Å©°í Á¤¹ÐÇÑ ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ°ÚÁö¸¸ ÀÌ ¿ª½Ãµµ ÃæºÐÇÑ Å©±â¿Í Á¤¹Ðµµ¸¦ Á¦°øÇÏÁö´Â ¸øÇÑ´Ù. õ¹®ÇÐÀ̳ª ¼³°è, ȸ°è µîÀÇ ºÐ¾ß¿¡¼­´Â Á¶ ´ÜÀ§ÀÇ ¼ö¸¦ ´Ù·ç¾î¾ß ÇÏ°í ¼Ò¼öÁ¡ ÀÌÇÏ ¼ö½ÊÀÚ¸®±îÁö Á¤¹ÐÇÏ°Ô Ç¥ÇöÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

½Ç¼ö¸¦ Á¤¼öºÎ¿Í ¼Ò¼öºÎ·Î ºÐÇÒÇÏ¿© Ç¥ÇöÇÏ´Â ¹æ½ÄÀº ´Ü¼øÇϱâ´Â ÇÏÁö¸¸ ÀüÇô Ä¡¹ÐÇÏÁö ¸øÇÏ°í È¿À²ÀûÀÌÁöµµ ¾Ê¾Æ ÁúÀûÀ¸·Î ´Ù¸¥ ¹æ¹ýÀ» ÇÊ¿ä·Î Çϴµ¥ ±× ¹æ½ÄÀÌ ¹Ù·Î ºÎµ¿ ¼Ò¼öÁ¡ ¹æ½ÄÀÌ´Ù. ½Ç¼ö´Â Á¤¼öºÎ¿Í ¼Ò¼öºÎ·Î ±¸¼ºµÇ¾î ÀÖÁö¸¸ ´ÙÀ½°ú °°ÀÌ °¡¼ö¿Í Áö¼ö·Îµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ºñÆ®ÀÇ ¼¼°è´Â 2Áø¼ö¸¸ ¾²Áö¸¸ ¼³¸íÀÇ ÆíÀÇ»ó ½Ç»ýÈ°¿¡¼­ »ç¿ëÇÏ´Â 10Áø¼ö¸¦ ¿¹·Î µç´Ù.

 

°íÁ¤ ¼Ò¼öÁ¡ ¹æ½Ä

ºÎµ¿ ¼Ò¼öÁ¡ ¹æ½Ä

123.456

1.2345 * 102

0.0123

1.23 * 10-2

1.2345

1.2345 * 100

 

°¡¼ö´Â ½Ç¼öÀÇ ½ÇÁ¦°ªÀ» Ç¥ÇöÇϸç Áö¼ö´Â Å©±â¸¦ Ç¥ÇöÇÏ¿© °¡¼öÀÇ ¾îµðÂë¿¡ ¼Ò¼öÁ¡ÀÌ ÀÖ´ÂÁö¸¦ ³ªÅ¸³½´Ù. Áö¼öÀÇ °ª¿¡ µû¶ó ¼Ò¼öÁ¡ÀÌ ¿òÁ÷À̱⠶§¹®¿¡ ÀÌ ¹æ½ÄÀ¸·Î ½Ç¼ö¸¦ Ç¥ÇöÇÏ´Â ¹æ¹ýÀ» ºÎµ¿(Ý©ÔÑ) ¼Ò¼öÁ¡À̶ó°í ÇÑ´Ù. ºÎµ¿ ¼Ò¼öÁ¡ Ç¥Çö ¹æ½ÄÀº C¾ð¾î»Ó¸¸ ¾Æ´Ï¶ó ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î, ±×·¡ÇÈ, °øÇÐ ÇÁ·Î±×·¥ µîÀÌ ÁؼöÇÏ´Â ±¹Á¦ Ç¥ÁØ(IEEE-754)À¸·Î ÁöÁ¤µÇ¾î ÀÖ´Ù. ´ÙÀ½Àº 32ºñÆ® ½Ç¼öÇüÀÎ floatÇüÀÇ ºñÆ® ±¸¼ºÀÌ´Ù.

ºÎÈ£´Â À½ ¾Æ´Ï¸é ¾çÀ̹ǷΠ1ºñÆ®¸¸ ÀÖÀ¸¸é µÇ°í Áö¼öºÎ 8ºñÆ®, °¡¼öºÎ 23ºñÆ®·Î ±¸¼ºµÇ¾î ÀÖ´Ù.  °¡¼öºÎ°¡ ±æ±â ¶§¹®¿¡ Á¤¹Ðµµ°¡ ºñ±³Àû ÃæºÐÇÏ°í Áö¼öºÎ°¡ µû·Î ÀÖÀ¸¹Ç·Î 1038Á¤µµÀÇ Å« ¼ö±îÁö Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¹°·Ð Á¤¹Ðµµ°¡ ¹«ÇÑÇÏÁö´Â ¾Ê±â ¶§¹®¿¡ ¼öÇп¡¼­ÀÇ ½Ç¼öó·³ ¼Ò¼öÁ¡ ÀÌÇÏ ¹«ÇÑ´ë±îÁö¸¦ ±â¾ïÇÏÁö´Â ¸øÇÑ´Ù. ºÎµ¿ ¼Ò¼öÁ¡ ¹æ½ÄÀº ÇÑ°¡Áö Å« ¹®Á¦Á¡ÀÌ Àִµ¥ °°Àº ¼ö¸¦ Ç¥ÇöÇÏ´Â Áö¼ö¿Í °¡¼öÀÇ Á¶ÇÕÀÌ ¿©·¯ ¹ú ³ª¿Ã ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ ¼ö½ÄµéÀº ¸ðµÎ 12.345¶ó´Â ½Ç¼ö°ªÀ» Ç¥ÇöÇÑ´Ù.

 

12.345*100, 1.2345*101, 0.12345*102, 123.45*10-1, 1234.5*10-2

 

°°Àº ¼ö¸¦ Ç¥ÇöÇÏ´Â ¶È°°Àº ¹æ¹ýÀÌ ¿©·µ Á¸ÀçÇÏ°Ô µÇ¸é µÎ º¯¼öÀÇ »óµî ºñ±³ ¿¬»êÀ» ÇϱⰡ ±î´Ù·Î¿ÍÁø´Ù. ±×·¡¼­ ÇÑ ¼ö¸¦ Ç¥ÇöÇÏ´Â ¹æ¹ýÀº Çϳª¸¸ Á¸ÀçÇϵµ·Ï Á¤±ÔÈ­(Normalization)¸¦ ÇÒ ÇÊ¿ä°¡ Àִµ¥ °¡¼öÀÇ Á¤¼öºÎ¸¦ ÇÑÀÚ¸®·Î Á¦ÇÑÇϸé 12.345´Â 1.2345*101¸¸ °¡´ÉÇØÁø´Ù. Áï, a.bcd*10n ½ÄÀ¸·Î ¼Ò¼öÁ¡ÀÌ Ç×»ó °¡¼öÀÇ Ã¹ ¹ø°¿Í µÎ ¹ø° »çÀÌ¿¡ ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

ÀÌ»óÀº 10Áø¼ö¸¦ ±âÁØÀ¸·Î ÇÑ ºÎµ¿ ¼Ò¼öÁ¡ Ç¥Çö ¹æ½ÄÀε¥ Á÷°üÀûÀÎ ÀÌÇظ¦ À§ÇØ 10ÀÇ °Åµì½ÂÀ» »ç¿ëÇß´Ù. ½ÇÁ¦ ÄÄÇ»ÅÍ´Â 2ÀÇ °Åµì½ÂÀ¸·Î Áö¼ö¸¦ Ç¥ÇöÇÏ°í °¡¼öµµ ÀÌÁø¼öÀ̹ǷΠ°¡¼ö°¡ 1~2»çÀÌÀÇ ¼ö·Î Á¦ÇÑµÇ¾î °¡¼ö´Â Ç×»ó 1.~~~~ÀÇ ÇüŸ¦ ¶ì°Ô µÈ´Ù. ½Ç¼ö¸¦ ±¸¼ºÇÏ´Â °¢ ¿ä¼Ò°¡ ¾î¶»°Ô ±¸¼ºµÇ°í Çؼ®µÇ´ÂÁö ¿ä¼Òº°·Î ¾Ë¾Æº¸ÀÚ.

 

¡á ºÎÈ£ : ºÎÈ£´Â À½¼ö ¶Ç´Â ¾ç¼ö µÑ ÁßÀÇ ÇϳªÀ̹ǷΠ1ºñÆ®¸¸ ÀÖÀ¸¸é µÈ´Ù. 0ÀÌ ¾ç¼öÀÌ°í 1ÀÌ À½¼öÀÌ´Ù. ÀÌ ºÎÈ£´Â ½Ç¼ö ÀÚüÀÇ ºÎÈ£¸¸À» ³ªÅ¸³»¸ç Áö¼öÀÇ ºÎÈ£´Â ¾Æ´Ï´Ù.

¡á Áö¼ö : Áö¼ö¸¦ nÀ̶ó°í ÇßÀ» ¶§ °¡¼öºÎ¿¡ 2nÀÌ °öÇØÁø´Ù. À½¼ö Áö¼öµµ Ç¥ÇöÇØ¾ß ÇϹǷΠÁö¼ö´Â ÀÚü¿¡ ºÎÈ£¸¦ µû·Î °¡Á®¾ß Çϴµ¥ À̶§´Â ºÎÈ£ ºñÆ®¸¦ µû·Î ¾²Áö ¾Ê°í 127ÀÇ ¹ÙÀ̾¸¦ Àû¿ëÇÑ´Ù. Áö¼öÀÇ ±æÀÌ´Â 8ºñÆ®À̹ǷΠ0~255±îÁöÀÇ ¹üÀ§¸¦ °¡Áö¸ç ¹ÙÀ̾ 127À» Àû¿ëÇϸé Áö¼öÀÇ Ç¥Çö ¹üÀ§´Â -127~128±îÁöÀÌ´Ù. ÃÖ¼Ò Áö¼ö -127°ú ÃÖ´ë Áö¼ö 128Àº 0°ú ¹«ÇѴ븦 Ç¥ÇöÇϴ Ưº°ÇÑ ¿ëµµ·Î ¿¹¾àµÇ¾î ÀÖ´Ù. ±×·¡¼­ floatÇüÀÇ ÃÖ´ë Ç¥Çö ¹üÀ§´Â 2127ÀÌ¸ç ´ë·« 1038ÀÌ µÈ´Ù.

¡á °¡¼ö : 23°³ÀÇ ºñÆ®·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç °¢ ÀÚ¸®¼ö¿¡ 2ÀÇ À½¼ö °Åµì½ÂÀ¸·Î °¡ÁßÄ¡°¡ ºÎ¿©µÇ¾î ÀÖ´Ù. Á¤±ÔÈ­ ±ÔÄ¢¿¡ ÀÇÇØ °¡¼ö´Â Ç×»ó ÀÌÁø¼ö 1~2»çÀÌ(1.~~~)¿©¾ß Çϸç ÀÌ ±ÔÄ¢À» ¸¸Á·Çϱâ À§ÇØ Á¦ÀÏ ¿ÞÂÊ ºñÆ®(20ÀÚ¸®)´Â Ç×»ó 1À̶ó°í °¡Á¤ÇÑ´Ù. ÀÌ ºñÆ®¸¦ º°µµ·Î ÀúÀåÇÏÁö ¾Ê´Â ´ë½Å Á¤¹Ðµµ´Â 2¹è ´õ ³ô¾ÆÁø´Ù.

°¡¼öÀÇ Á¦ÀÏ ¿ÞÂÊ ºñÆ®ºÎÅÍ 1/2, 1/4, 1/8, 1/16ÀÇ °¡ÁßÄ¡¸¦ °¡Áö´Â ¼ÀÀ̸ç ÀÌ ºñÆ®µé·ÎºÎÅÍ °è»êµÈ °ª¿¡ 1(20)À» ´õÇÏ¸é ½ÇÁ¦ °¡¼ö°¡ µÈ´Ù. ´ÙÀ½ ½Ç¼ö´Â ½ÊÁø¼ö·Î ¾î¶² ¼öÀÎÁö °è»êÇØ º¸ÀÚ.

 

0 01111101 10000000000000000000000

 

ºÎÈ£°¡ 0À̹ǷΠÀÌ °ªÀº ÀÏ´Ü ¾ç¼öÀÌ´Ù. Áö¼ö´Â 125Àε¥ ¹ÙÀ̾ 127À» »©¸é -2ÀÌ´Ù. °¡¼ö´Â »ý·«µÈ 1°ú ù ¹ø° ºñÆ®ÀÇ °¡ÁßÄ¡ 1/2¸¦ ´õÇϸé 3/2ÀÌ µÈ´Ù. °¡¼öÀÇ Á¦ÀÏ ¿ÞÂÊ¿¡ 1ÀÌ »ý·«µÇ¾î ÀÖ´Ù°í º¼ ¼ö ÀÖÀ¸¹Ç·Î ½ÇÁ¦ °¡¼ö´Â (1100000~)ÀÌ´Ù. ±×·¡¼­ ÀÌ °ªÀº ´ÙÀ½°ú °°ÀÌ ½ÊÁø¼ö·Î ¹Ù²Ü ¼ö ÀÖ´Ù.

 

3/2 * 2-2 = 3/2 * 1/4 = 3/8 = 0.375

 

¸ðµç °ÍÀÌ 2Áø¼ö·Î °è»êµÇ°í ¹ÙÀ̾, Á¤±ÔÈ­¸¦ À§ÇÑ »ý·«Ä¡ µîÀ» °í·ÁÇؼ­ °è»êÇØ¾ß ÇϹǷΠ»ç¶÷ÀÌ Á÷Á¢ ºÎµ¿ ¼Ò¼öÁ¡ ºñÆ®¸¦ Çؼ®Çؼ­ 10Áø¼ö·Î °ªÀ» ¾Ë¾Æ³»´Â °ÍÀº ¹«Ã´À̳ª ¾î·Æ°í º¹ÀâÇÏ´Ù. ÇÏÁö¸¸ 2Áø¼ö¸¦ Àß ´Ù·ç´Â ÄÄÇ»ÅÍ¿¡°Ô´Â ±×´ÙÁö ¾î·ÆÁö ¾ÊÀº ÀÏÀÏ °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â ºÎµ¿ ¼Ò¼öÁ¡ ¼öÀÇ ºñÆ® ±¸Á¶¸¦ ´ýÇÁÇؼ­ Ãâ·ÂÇϴµ¥ ÀÌ ¿¹Á¦·Î ´Ù¾çÇÑ ½Ç¼ö°ªÀ» ºÐ¼®ÇØ º¸¸é¼­ floatÇüÀÇ ±¸Á¶¸¦ ¿¬±¸ÇØ º¸±â ¹Ù¶õ´Ù.

 

¿¹ Á¦ : PrintFloat

#include <Turboc.h>

 

void printfloat(float f)

{

     unsigned t;

     char temp[35],bin[35];

    

     // ºñÆ®¸¦ ´Ù·ç±â ½±µµ·Ï Á¤¼öÇü º¯¼ö¿¡ ´ëÀÔÇÑ´Ù.

     t=*(unsigned *)&f;

 

     // ¼±Çà Á¦·Î¸¦ Æ÷ÇÔÇÑ 32ÀÚ¸®ÀÇ 2Áø¼ö ¹®ÀÚ¿­·Î º¯È¯

     itoa(t,bin,2);

     memset(temp,'0',35);

     strcpy(temp+32-strlen(bin),bin);

 

     // ºÎÈ£, Áö¼ö ´ÙÀ½¿¡ °ø¹éÀ» Çϳª¾¿ ³ÖÀ½

     bin[0]=temp[0];

     bin[1]=' ';

     strncpy(bin+2,temp+1,8);

     bin[10]=' ';

     strcpy(bin+11,temp+9);

 

     printf("½Ç¼ö=%f(%s), ",f,bin);

 

     // Áö¼ö Ãâ·Â

     printf("Áö¼öºÎ = %d\n",(t >> 23 & 0xff) - 127);

}

 

void main()

{

     printfloat(0.375f);

     printfloat(3.14f);

     printfloat(-0.5f);

     printfloat(0.1f);

}

 

ºÎµ¿ ¼Ò¼öÁ¡ÀÇ °¢ ºñÆ®¸¦ ¿ä¼Òº°·Î Àß¶ó ¹®ÀÚ¿­·Î Á¶¸³Çؼ­ È­¸éÀ¸·Î Ãâ·ÂÇϴµ¥ ±æÁö´Â ¾ÊÁö¸¸ ºñÆ® Á¶ÀÛ¹®ÀÌ ´Ù¼Ò ¾î·Á¿ö º¸ÀÏ °ÍÀÌ´Ù. ÀÌ ÀýÀÇ ÁÖÁ¦´Â ½Ç¼ö ŸÀÔÀÇ ³»ºÎ ±¸Á¶À̹ǷΠPrintFloat ÇÔ¼ö¿¡ ´ëÇÑ ºÐ¼®Àº µû·Î ÇÏÁö ¾Ê±â·Î ÇÑ´Ù. ºñÆ®¿Í ¹®ÀÚ¿­À» ¼¶¼¼ÇÏ°Ô ´Ù·ç´Â Àý¹¦ÇÑ ²Ç¼ö¸¦ ±¸°æÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÇÑ°¡ÇÒ ¶§ ºÐ¼®ÇØ º¸¾Æ¶ó. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

½Ç¼ö=0.375000(0 01111101 10000000000000000000000), Áö¼öºÎ = -2

½Ç¼ö=3.140000(0 10000000 10010001111010111000011), Áö¼öºÎ = 1

½Ç¼ö=-0.500000(1 01111110 00000000000000000000000), Áö¼öºÎ = -1

½Ç¼ö=0.100000(0 01111011 10011001100110011001101), Áö¼öºÎ = -4

 

ÀÌ °á°ú¿¡¼­ º¸´Ù½ÃÇÇ ºÎµ¿ ¼Ò¼öÁ¡Àº 10Áø¼ö¸¦ Á¤È®ÇÏ°Ô Ç¥ÇöÇÏÁö ¸øÇϴµ¥ 0.1À̶ó´Â °£´ÜÇÑ 10Áø¼ö¸¦ 2Áø¼ö·Î Ç¥ÇöÇßÀ» ¶§ ±²ÀåÈ÷ º¹ÀâÇÑ ºñÆ®¿­ÀÌ ³ª¿Â´Ù. ±Ùº»ÀûÀ¸·Î 2Áø¼ö¿Í 10Áø¼öÀÇ ¼öü°è°¡ ´Ù¸£±â ¶§¹®ÀÌ´Ù. 2Áø °¡¼öºÎÀÇ °¢ ÀÚ¸®¼ö´Â ÀÌÀü ÀÚ¸®¼öÀÇ Àý¹Ý¸¸Å­Àε¥ Á¤È®ÇÑ 10Áø¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖÀ» ¶§±îÁö Àý¹Ý¾¿ ´õÇØ ³ª°£´Ù. ±×·¡µµ ¿øÇÏ´Â 10Áø¼ö¿¡ ²À ¸Â´Â ¼ö°¡ Àß ¾È ¸¸µé¾îÁö¸ç ±×·¯´Ù º¸¸é ¾ÆÁÖ ³·Àº ÀÚ¸®±îÁö ´õÇϱ⸦ °è¼Ó ¹Ýº¹ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ带 ½ÇÇàÇØ º¸ÀÚ.

 

float f=0.1f;

printf("%.10f",f);

 

0.1À» ¼Ò¼öÁ¡ ÀÌÇÏ 10ÀÚ¸®±îÁö Ãâ·ÂÇϸé 0.1000000015¶ó´Â °ªÀÌ ³ª¿À´Âµ¥ 2ÀÇ À½¼ö °Åµì½ÂÀ¸·Î ½ÊÁø¼ö 0.1À» Á¤È®ÇÏ°Ô Ç¥ÇöÇÏÁö ¸øÇϹǷΠ°¡Àå ±ÙÁ¢ÇÑ ¼ö¸¦ À¯È¿ÀÚ¸® ¹üÀ§¿¡¼­ Ç¥ÇöÇÑ °ÍÀÌ´Ù. »ç½Ç ÀÌ Á¤µµÀÇ ¿ÀÂ÷¶ó¸é °ÅÀÇ ¹«½ÃÇصµ µÉ Á¤µµÀÇ °æ¹ÌÇÑ °ªÀÌ´Ù. ±×·¯³ª ÀÌ·± °æ¹ÌÇÑ °ªÀÌ ¸ðÀÌ¸é ¿ÀÂ÷°¡ Á¡Á¡ Ä¿Áø´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸ÀÚ.

 

¿¹ Á¦ : FloatError

#include <Turboc.h>

 

void main()

{

     float d=0.0f;

     int i;

 

     for (i=0;i<1000;i++) {

          d+=0.1f;

     }

     printf("%f",d);

}

 

0.1À» 1000¹ø ´õÇßÀ¸¹Ç·Î 100.0ÀÌ µÇ¾î¾ß Çϴµ¥ ½ÇÁ¦·Î ½ÇÇàÇØ º¸¸é 99.999046ÀÌ µÈ´Ù. ÀÛÀº ¿ÀÂ÷µéÀÌ ´©ÀûµÇ´Ùº¸¸é ÀÌ ¿ÀÂ÷µéÀÌ ¸ð¿©¼­ ¿øÇÏ´Â °ª°ú Á¡Á¡ ´õ ¸Ö¾îÁø´Ù. ¹Ýº¹ ȸ¼ö¸¦ 10000À¸·Î ´Ã¸®¸é 999.902893ÀÌ µÇ°í 100000À¸·Î ´Ã¸®¸é 9998.556641ÀÌ µÈ´Ù. ¿ÀÂ÷ÀÇ ´©Àûȸ¼ö°¡ ¸¹À»¼ö·Ï ¹®Á¦°¡ Á¡Á¡ ½É°¢ÇØÁö´Â °ÍÀÌ´Ù. ¹°·Ð 0.1f*1000À» ¹Ù·Î °è»êÇϸé Á¤È®ÇÏ°Ô 100.0ÀÌ °è»êµÈ´Ù.

½Ç¼ö´Â ºñ·Ï ÀÛ±â´Â ÇÏÁö¸¸ Ç×»ó ¾î´À Á¤µµÀÇ ¿ÀÂ÷°¡ ÀÖ´Ù. ±×·¯³ª ÀÌ·± ¹Ì¼¼ÇÑ ¿ÀÂ÷°¡ ½ÇÁ¦ ÇÁ·Î±×·¥¿¡¼­ ¸»½éÀ» ÀÏÀ¸Å°´Â °æ¿ì´Â °ÅÀÇ ¾ø´Âµ¥ ¿Ö³ÄÇÏ¸é ¿¬»ê °á°ú¿¡ ¿µÇâÀ» ÁÙ¸¸Å­ Å©Áö ¾Ê±â ¶§¹®ÀÌ´Ù. ¼³»ç Á¤¹Ðµµ¸¦ ¿äÇÏ´Â °úÇÐ °è»êÀ̶ó Çصµ ¸»ÀÌ´Ù. ±×·¯³ª Ç×»ó ¿ÀÂ÷°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù´Â Á¡Àº ÁÖÀÇÇØ¾ß Çϴµ¥ ¿¹¸¦ µé¾î ½Ç¼ö³¢¸® »óµî ºñ±³ ¿¬»êÀ» Çؼ­´Â ¾ÈµÈ´Ù. À§ ¿¹Á¦¿¡¼­ ·çÇÁ¸¦ ½ÇÇàÇÑ ÈÄ if (d == 100.0) À̶ó°í ºñ±³Çϸé Ç×»ó °ÅÁþÀ¸·Î Æò°¡µÇ´Âµ¥ ¾Æ¹«¸® ºñ½ÁÇÑ °ªÀÌ¶óµµ ºñÆ®¿­Àº ºÐ¸íÈ÷ ´Ù¸£±â ¶§¹®ÀÌ´Ù. »óµî ºñ±³ ¿¬»êÀ» ÇÏ´Â ´ë½Å if (abs(d-100.0) < 0.01) ÀÌ·± ½ÄÀ¸·Î ºÎµî ºñ±³ÇÏ¿© Â÷ÀÌ°¡ ¿ÀÂ÷ ¹üÀ§¾ÈÀ̶ó¸é °°Àº ¼ö·Î ºÁ¾ß ÇÑ´Ù. ½Ç¼ö ÀÚü¸¦ ¸¹ÀÌ ¾²Áö ¾ÊÀ¸¹Ç·Î ºñ±³ÇÒ Àϵµ º°·Î ¾ø°ÚÁö¸¸ Ȥ½Ã ÀÖ´Ù¸é ÁÖÀǸ¦ ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

ºÎµ¿ ¼Ò¼öÁ¡ ŸÀÔ¿¡ ´ëÇÑ ¶Ç ´Ù¸¥ ÁÖÀÇ »çÇ×Àº ¹üÀ§¿Í Á¤¹Ðµµ°¡ ´Ù¸£´Ù´Â °ÍÀÌ´Ù. floatÇüÀÌ 1038±îÁö Ç¥ÇöÇÒ ¼ö ÀÖ´Ù°í Çؼ­ 10Áø¼ö 38ÀÚ¸®¼ö¸¦ Á¤È®ÇÏ°Ô ±â¾ïÇÒ ¼ö ÀÖ´Ù´Â ¾ê±â´Â ¾Æ´Ï´Ù. Áö¼öÀÇ ¹üÀ§°¡ 10Áø¼ö·Î 38ÀÚ¸® Á¤µµ µÈ´Ù´Â °ÍÀÌÁö °¡¼öÀÇ Á¤¹Ðµµ´Â ±â²¯ÇØ¾ß 10Áø¼ö·Î 7ÀÚ¸® Á¤µµ¹Û¿¡ µÇÁö ¾Ê´Â´Ù.

 

float f=123456789.123456789f;

 

ÀÌ ¼±¾ð¹®Àº floatÇü º¯¼ö¿¡ ±ä ½Ç¼ö¸¦ ´ëÀÔÇϴµ¥ ½ÇÁ¦ ÀÌ º¯¼ö¿¡ ±â¾ïµÇ´Â °ªÀº 123456792.0ÀÌ´Ù. 8ÀÚ¸® ÀÌ»óÀÇ °ªÀº ¹Ý¿Ã¸²µÇ¾î Àß·Á ³ª°¡¹Ç·Î ¿øÇÏ´Â ¹Ù¿Í ´Ù¸¥ ¿ÀÂ÷°¡ ¹ß»ýÇÑ´Ù. ÀÌ·± °æ¿ì´Â °¡¼öºÎ°¡ ÃæºÐÈ÷ Å« doubleÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. doubleÇüÀº ½ÊÁø¼ö·Î 15ÀÚ¸®±îÁö À¯È¿ÇÏ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : FloatError2

#include <Turboc.h>

 

void main()

{

     float f1,f2,f3;

     f1=123456.0f;

     f2=0.0001f;

     f3=f1+f2;

     printf("f1=%f\nf2=%f\nf3=%f\n",f1,f2,f3);

}

 

f1, f2 µÎ °³ÀÇ floatÇü º¯¼ö¿¡ ÃʱⰪÀ» ´ëÀÔÇÑ ÈÄ µÎ °ªÀ» ´õÇØ f3¿¡ ´ëÀÔÇß´Ù. 123456.0°ú 0.0001À» ´õÇßÀ¸¹Ç·Î f3Àº ´ç¿¬È÷ 123456.0001ÀÌ µÇ¾î¾ß ÇÒ °Í °°Áö¸¸ °á°ú´Â 123456.0ÀÌ µÇ¾î f2¸¦ ´õÇϳª ¸¶³ªÀÇ °á°ú°¡ ³ª¿Â´Ù. f1°ú f2´Â floatÇü¿¡ ÀûÀýÇÑ Á¤¹Ðµµ¸¦ °¡ÁöÁö¸¸ ÀÌ µÎ °ªÀÇ Áö¼öÂ÷°¡ ½ÉÇØ ´õÇÑ °á°ú´Â floatÇü¿¡ ¸ÂÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ½Ç¼ö³¢¸® ´õÇÒ ¶§´Â Áö¼öºÎ¸¦ ÀÏÄ¡½ÃŲ ÈÄ °¡¼öºÎ¸¦ ´õÇϴµ¥ µÎ °ªÀÇ Áö¼öÂ÷°¡ ½ÉÇÒ¼ö·Ï µ¡¼À °á°úÀÇ °¡¼öºÎ°¡ ±æ¾îÁ® Á¤¹Ðµµ¸¦ ÃÊ°úÇÒ È®·üÀÌ ³ô´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

f1=123456.000000

f2=0.000100

f3=123456.000000

 

floatÇüÀÇ ºñÆ® ±¸Á¶¸¦ ºÐ¼®ÇØ º¸¸é ÀÌ ¿¹Á¦ÀÇ °á°ú°¡ ¿Ö ÀÌ·¸°Ô ³ª¿À´ÂÁö¸¦ ¼³¸íÇÒ ¼ö ÀÖ´Ù. ºñÁÖ¾ó C++ 6.0ÀÇ °æ¿ì´Â f3ÀÌ 123456.0001À¸·Î Ãâ·ÂµÇ±âµµ Çϴµ¥ ÀÌ´Â ÄÄÆÄÀÏ·¯°¡ À̾îÁö´Â Ãâ·Â¹®À» À§ÇØ float¸¦ double·Î Àӽà ȮÀåÇÏ¿© º¯¼öÀÇ ´É·ÂÄ¡¸¦ ÃÊ°úÇÏ´Â ºÒÇÊ¿äÇÑ ¼­ºñ½º¸¦ Çϱ⠶§¹®ÀÌ´Ù. ºñÁÖ¾ó C++ 7.0, Dev-C++ µî ´Ù¸¥ ÄÄÆÄÀÏ·¯´Â Á¦´ë·Î(?) Ʋ¸° °á°ú¸¦ Ãâ·ÂÇÑ´Ù. º¹ÀâÇÑ ½Ç¼ö °è»êÀº ÄÄÆÄÀÏ·¯¸¶´Ù Á¶±Ý¾¿ ´Ù¸¦ ¼öµµ ÀÖ¾î °¡±ÞÀûÀ̸é Å« ŸÀÔÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

½Ç¼öÀÇ ´ëÇ¥°ÝÀ¸·Î floatÇüÀ» ºÐ¼®ÇØ ºÃ´Âµ¥ 64ºñÆ®ÀÇ doubleÇüÀº Áö¼öºÎ 11, °¡¼öºÎ 52·Î Á» ´õ Å« Å©±â¸¦ °¡Áö°í ¹ÙÀ̾°¡ 1023À̶ó´Â °Í ¿Ü¿¡ floatÇü°ú ±¸Á¶ÀûÀÎ Â÷ÀÌÁ¡Àº ¾ø´Ù. °¢ ¿ä¼ÒÀÇ Å©±â°¡ Å©±â ¶§¹®¿¡ doubleÇüÀº floatÇüº¸´Ù ÈξÀ ´õ Å©°í Á¤¹ÐÇÑ ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¹«·Á 10308½ÂÀ̶ó´Â µµÀúÈ÷ »ó»óÇÒ ¼ö ¾ø´Â ¹«Áö¸·ÁöÇÑ ¼ö¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ°í 10Áø¼ö 15ÀÚ¸® Á¤µµÀÇ Á¤¹Ðµµ¸¦ °¡Áø´Ù.

ÀÌ»óÀ¸·Î ½Ç¼öÀÇ ±¸Á¶¿¡ ´ëÇØ ¿¬±¸ÇØ ºÃ´Âµ¥ Á¦ÇÑµÈ ºñÆ® ±æÀÌ¿¡ ÃÖ´ëÇÑ Å« ¼ö¸¦ Á¤¹Ðµµ¸¦ ÀÒÁö ¾ÊÀ¸¸é¼­ ÀúÀåÇϱâ À§ÇØ ¹«Ã´ º¹ÀâÇÑ ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù. ±×·¸´Ù¸é ½Ç¼öÀÇ ±¸Á¶¸¦ ¿¬±¸ÇØ º¸´Â °ÍÀº °ú¿¬ ¾î¶² Àǹ̰¡ ÀÖÀ»±î? ¼öÄ¡ ¿¬»ê º¸Á¶ ÇÁ·Î¼¼¼­°¡ ½Ç¼ö ¿¬»êÀ» ÇÏ°í Ãâ·Â, º¯È¯ µîÀ» ÇØ ÁÖ´Â ÇÔ¼öµéÀÌ ÀÖÀ¸¹Ç·Î ¿ì¸®°¡ Á÷Á¢ ½Ç¼öÀÇ ºñÆ®¸¦ Çؼ®ÇÒ ÀÏÀº °ÅÀÇ ¾ø´Ù°í ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Àû¾îµµ ½Ç¼öÀÇ ºñÆ® ±¸Á¶°¡ Á¤¼ö¿Í ´Ù¸£¹Ç·Î ´ÙÀ½°ú °°Àº Äڵ尡 À߸øµÇ¾ú´Ù´Â °ÍÀº ¾Ë ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù.

 

double d=123.456;

int *pi=(int *)&d;

printf("%d\n",*pi);

 

ÀÌ ¿¬»ê¹®ÀÇ °á°ú·Î 123ÀÌ ³ª¿À±â¸¦ ±â´ëÇÑ´Ù¸é ¾ÆÁ÷µµ ºñÆ®ÀÇ ¼¼°è¸¦ ÀÌÇØÇÏÁö ¸øÇß´Ù°í º¸¸é Ʋ¸²¾ø´Ù. ¾ÆÁÖ ¾û¶×ÇÑ ¼ýÀÚ°¡ ³ª¿Ã °ÍÀÌ´Ù.