20.1 °³¿ä complex Ŭ·¡½º´Â ÅÛÇø´ Ŭ·¡½ºÀÌ´Ù. º¹¼Ò¼ö¿Í ÀÌ¿Í °ü·ÃµÈ ¿¬»êµéÀÌ ÇÊ¿äÇÒ ¶§ »ç¿ëÇÏ¸é µÈ´Ù. complex Ŭ·¡½º´Â C++¿¡ °ü·ÃµÈ Ã¥µé¿¡¼­ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÒ ¶§ ÀÚÁÖ ¾²ÀÌ´Â ¿¹Á¦À̸ç, C++À» °øºÎÇϼ̴ø ºÐµéÀ̶ó¸é ÇѹøÂë Á¤ÀÇÇغÃÀ» Ŭ·¡½ºÀÏ °ÍÀÌ´Ù. C++ Ç¥ÁØ¿¡ Æ÷ÇÔµÈ complex Ŭ·¡½º´Â ÅÛÇø´À¸·Î Á¤ÀǵǾî ÀÖ´Ù. º¹¼Ò¼ö¿¡ Á¤ÀǵǾî ÀÖ´Â ¿¬»êµéÀº C++¿¡¼­ Á¦°øÇÏ´Â ´Ù¸¥ ¼öÄ¡ °ü·Ã ŸÀÔµé(int, float, double, long double, ...)°ú »ç¿ë´Âµ¥ ¾Æ¹«·Ã Á¦¾àÀÌ ¾øµµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù. 20.1.1 Include È­ÀÏ º¹¼Ò¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº complex Çì´õÈ­ÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù. #include 20.2 º¹¼Ò¼öÀÇ »ý¼º°ú ±× »ç¿ë¹ý ¿©±â¼­´Â º¹¼Ò¼ö¸¦ »ý¼ºÇÏ´Â ¹æ¹ý°ú º¹¼Ò¼öµé°£ÀÇ ¿¬»ê¿¡ °üÇØ ¼³¸íÇϱâ·Î ÇÑ´Ù. 20.2.1 º¹¼Ò¼öÀÇ ¼±¾ð, ±ØÇü½Ä°ú º¸¼ö ±¸Çϱâ complex ŸÀÔÀÇ °´Ã¼¸¦ ¼±¾ðÇϱâ À§Çؼ­´Â ¸ÕÀú º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ Å¸ÀÔÀ» ¹«¾ùÀ¸·Î ÇÒÁö¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù. º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ Å¸ÀÔÀº ÅÛÇø´ ÀÎÀÚ·Î ³Ñ°ÜÁÖ¸ç, À̶§, ÀÎÀÚÀÇ Å¸ÀÔÀº C++¿¡¼­ Á¦°øÇÏ´Â ºÎµ¿¼Ò¼ö µ¥ÀÌÅÍ Å¸ÀÔ¸¸ÀÌ Çã¿ëµÈ´Ù. Áï, float, double, long double ¼¼°¡Áö¸¸ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. complex Ŭ·¡½º´Â ³×°¡Áö ÇüÅÂÀÇ »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖ´Ù. ÀÎÀÚ°¡ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é, ½Ç¼öºÎ¿Í Çã¼öºÎ°¡ ¸ðµÎ 0ÀÎ º¹¼Ò¼ö¸¦ »ý¼ºÇÏ°í, ÀÎÀÚ°¡ Çϳª¸¸ ÁÖ¾îÁö¸é, ÀÌ´Â ½Ç¼öºÎÀÇ °ªÀ¸·Î ÇÒ´çµÇ¸ç, Çã¼öºÎ´Â 0ÀÎ º¹¼Ò¼ö¸¦ »ý¼ºÇÑ´Ù. ÀÎÀÚ°¡ µÎ°³ÀÎ °æ¿ì¿¡´Â ½Ç¼öºÎ°¡ ù¹ø° ÀÎÀÚÀÇ °ªÀ» Çã¼öºÎ°¡ µÎ¹ø° ÀÎÀÚÀÇ °ªÀ» °¡Áö´Â º¹¼Ò¼ö¸¦ »ý¼ºÇÑ´Ù. ¸¶Áö¸·Àº º¹»ç »ý¼ºÀڷμ­, ´Ù¸¥ º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ½Ç¼öºÎ¿Í Çã¼öºÎ°¡ µ¿ÀÏÇÑ º¹¼Ò¼ö¸¦ »ý¼ºÇس½´Ù. complex com1; // 0 + 0i complex com2(3.14); // 3.14 + 0i complex com3(1.5, 3.14); // 1.5 + 3.14i complex com4(com2); // 3.14 + 0i (com2¿Í µ¿ÀÏ) ´ç¿¬ÇÑ ¸»ÀÌÁö¸¸, º¹¼Ò¼ö°£¿¡´Â ¼­·Î ´ëÀÔÀÌ °¡´ÉÇÏ´Ù. ±×¸®°í, º¹¼Ò¼ö ŸÀÔÀÇ º¯¼ö¿¡ ½Ç¼ö°ªÀ» ´ëÀÔÇÒ ¼ö Àִµ¥, ÀÌ ¶§ ½Ç¼öºÎ´Â ¿ìº¯ÀÇ °ªÀ» °¡Áö°Ô µÇ°í, Çã¼öºÎ´Â 0 °ªÀ» °¡Áö°Ô µÈ´Ù. º¹¼Ò¼ö º¯¼ö¿¡ ½Ç¼ö°ªÀ» ´ëÀÔÇÒ ¶§´Â ½Ç¼ö¸¦ º¹¼Ò¼ö·Î ¹Ù²ãÁÖ´Â º¯È¯ »ý¼ºÀÚ(conversion constructor)°¡ ÇÊ¿äÇÏ°Ô µÇ´Âµ¥, ÀÌ ¶§ ¾Õ¿¡¼­ ¼³¸íÇÑ ÀÎÀÚ°¡ ÇϳªÀÎ »ý¼ºÀÚ¸¦ »ç¿ëÇÑ´Ù. com1 = com3; // com1: 1.5 + 3.14i com3 = 2.17; // com3: 2.17 + 0i polar() ÇÔ¼ö´Â ±ØÇü½Ä(Å©±â¿Í À§»ó°¢À¸·Î Ç¥Çö)¿¡ ÇØ´çÇÏ´Â º¹¼Ò¼ö°ªÀ» ¾Ë¾Æ³»´Âµ¥ »ç¿ëÇÑ´Ù. com4 = polar(5.6, 1.8); // 5.6 * ( cos(1.8) + i sin(1.8) ) conj()´Â ÀÎÀÚ·Î ÁÖ¾îÁø º¹¼Ò¼öÀÇ º¸¼ö¸¦ ±¸ÇÒ ¶§ »ç¿ëÇÑ´Ù. ÁÖ¾îÁø º¹¼Ò¼ö°¡ x+iy¶ó¸é, ÀÌ°ÍÀÇ º¸¼ö´Â x-iy°¡ µÈ´Ù. complex com5 = conj(com3); // com5: 1.5 - 3.14i [Image]ÇÔ¼ö¿Í ¸â¹ö ÇÔ¼ö 20.2.2 º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎ ¸â¹öÇÔ¼ö·Î Á¦°øµÇ´Â real()¿Í imag()´Â °¢°¢ º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎ¸¦ ¹ÝȯÇÑ´Ù. À̵éÀº ¸â¹öÇÔ¼ö»Ó¸¸ ¾Æ´Ï¶ó, ÀÏ¹Ý ÇÔ¼öÀÇ ÇüÅ·ΠȣÃâÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ µÎ ÁÙÀº ¿ÏÀüÈ÷ ¶È°°Àº °á°ú¸¦ Ãâ·ÂÇÑ´Ù. cout << com1.real() << "+" << com1.imag() << "i" << endl; cout << real(com1) << "+" << imag(com1) << "i" << endl; 20.2.3 º¹¼Ò¼öÀÇ »çÄ¢¿¬»ê +, -, *, / ¿¬»êÀÚµéÀº °¢°¢ º¹¼Ò¼öÀÇ µ¡¼À, »¬¼À, °ö¼À, ³ª´°¼ÀÀ» ¼öÇàÇϴµ¥ »ç¿ëÇÑ´Ù. ÀÌµé ¿¬»êÀÚ´Â µÎ º¹¼Ò¼ö°£ÀÇ »çÄ¢¿¬»êÀ» ¼öÇàÇϸç, ¹°·Ð º¹¼Ò¼ö¿Í ½Ç¼ö°£ÀÇ »çÄ¢¿¬»ê¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. +=, -=, *=, /= ¿¬»êÀÚµµ Á¤ÀǵǾî ÀÖ´Ù. cout << com1 + com2 << endl; cout << com1 - 3.14 << endl; cout << 2.75 * com2 << endl; com1 += com3 / 2.0; ´ÜÇ× ¿¬»êÀÚ +¿Í -µµ Á¤ÀǵǾî ÀÖ´Ù. ´ÜÇ׿¬»êÀÚ -´Â ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ ºÎÈ£¸¦ ¹Ù²ãÁØ´Ù. 20.2.4 º¹¼Ò¼öÀÇ ºñ±³ == ¿¬»êÀÚ¿Í != ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© º¹¼Ò¼ö°£ÀÇ »óµî°ü°è¸¦ ¾Ë¾Æº¼ ¼ö ÀÖ´Ù. µÎ º¹¼Ò¼öÀÇ »óµî°ü°Ô´Â ½Ç¼öºÎ¿Í Çã¼öºÎ°¡ ¸ðµÎ °°À» ¶§ ¼º¸³ÇÑ´Ù. ´Ü º¹¼Ò¼öÀÇ ºñ±³½Ã¿¡ ¹Ýµå½Ã À¯ÀÇÇÒ Á¡ÀÌ ÇÑ°¡Áö Àִµ¥, ÀÌ´Â º¹¼Ò¼ö°£¿¡´Â ´ë¼Ò °ü°è°¡ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­, º¹¼Ò¼ö°£¿¡´Â <, >, <=, >=¿Í °°Àº ºñ±³ ¿¬»êÀÚ¸¦ Àû¿ëÇÒ ¼ö ¾ø´Ù. 20.2.5 ½ºÆ®¸² ÀÔÃâ·Â º¹¼Ò¼ö´Â Ãâ·Â ½ºÆ®¸²¿¡ ´ëÇÑ ¾²±â¿Í ÀÔ·Â ½ºÆ®¸²À¸·ÎºÎÅÍÀÇ ÀбⰡ °¡´ÉÇÏ´Ù. ½±°Ô ¸»ÇØ, '<<'¿¬»êÀÚ¿Í '>>' ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© º¹¼Ò¼öÀÇ Ãâ·Â°ú ÀÔ·ÂÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. º¹¼Ò¼ö¸¦ Ãâ·ÂÇÒ ¶§´Â ¾çÂÊ¿¡ °ýÈ£¸¦ ¾º¿ö¼­ Ãâ·ÂÇϴµ¥, ¿¹¸¦ µé¾î, º¹¼Ò¼ö '3+i4'´Â (3,4)¿Í °°ÀÌ Ãâ·ÂµÇ¸ç, '3'¿Í °°ÀÌ Çã¼öºÎ°¡ 0ÀÎ º¹¼Ò¼öÀÇ °æ¿ì¿¡´Â (3)À¸·Î Ãâ·ÂµÈ´Ù. 20.2.6 º¹¼Ò¼öÀÇ ³ð(norm), Àý´ë°ª, À§»ó°¢ - norm(), abs(), arg() norm() ÇÔ¼ö´Â º¹¼Ò¼öÀÇ ³ð(norm)°ªÀ» ¹ÝȯÇÑ´Ù. ³ð(norm)À̶õ ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ Á¦°öÀÇ ÇÕÀÌ´Ù. abs() ÇÔ¼ö´Â º¹¼Ò¼öÀÇ Àý´ë°ªÀ» ¹ÝȯÇϸç, ³ð(norm)ÀÇ Á¦°ö±Ù¿¡ ÇØ´çÇÑ´Ù. ÀÌ µÎ ÇÔ¼ö´Â ¸ðµÎ ¸â¹öÇÔ¼ö°¡ ¾Æ´Ñ, º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î °¡Áö´Â ÀÏ¹Ý ÇÔ¼öÀÌ´Ù. cout << norm(com2) << endl; cout << abs(com2) << endl; º¹¼Ò¼öÀÇ À¯Çâ À§»ó°¢Àº arg()¸¦ »ç¿ëÇÏ¿© ¾ò¾î³¾ ¼ö ÀÖ´Ù. cout << com4 << " in polar coordinates is " << arg(com4) << " and " << norm(com4) << endl; 20.2.7 »ï°¢ÇÔ¼ö ±âÁ¸¿¡ ½Ç¼öÇü ŸÀÔ¿¡ ´ëÇØ Á¤ÀǵǾîÀÖ´ø »ï°¢ÇÔ¼öµé(sin(), cos(), tan(), sinh(), cosh(), tanh())Àº º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀÏ ¼ö ÀÖµµ·Ï È®ÀåµÇ¾ú´Ù. ÀÌµé °¢°¢Àº º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ º¹¼Ò¼ö°ªÀ» ¹ÝȯÇÑ´Ù. 20.2.8 ÃÊ¿ùÇÔ¼ö ÃÊ¿ùÇÔ¼ö(exp(), log(), log10(), sqrt())µéµµ º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹ÞÀ» ¼ö ÀÖ°Ô È®ÀåµÇ¾ú´Ù. º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ º¹¼Ò¼ö¸¦ ¹ÝȯÇÑ´Ù. Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­´Â ¿©·¯°¡Áö ÇüÅÂÀÇ Áö¼öÇÔ¼ö pow()¸¦ Á¤ÀÇÇÏ°í Àִµ¥, ¹ØÀÌ º¹¼Ò¼öÀÌ°í Áö¼ö°¡ Á¤¼ö/º¹¼Ò¼ö/½Ç¼öÀÎ °Í, ¹ØÀÌ ½Ç¼öÀÌ°í Áö¼ö°¡ º¹¼Ò¼öÀÎ °ÍµéÀÌ ÀÖ´Ù. 20.3 ¿¹Á¦ ÇÁ·Î±×·¥ - ÀÌÂ÷¹æÁ¤½ÄÀÇ ±Ù ÀÌÂ÷¹æÁ¤½Ä ax2 + bx + c = 0 ÀÇ ±ÙÀº ´ÙÀ½ °ø½ÄÀ¸·Î ±¸ÇÒ ¼ö ÀÖ´Ù. x = (-b + sqrt(b2 - 4ac)) / 2a ¶Ç´Â x = (-b - sqrt(b2 - 4ac)) / 2a ´ÙÀ½ ÇÁ·Î±×·¥Àº ÀÌÂ÷¹æÁ¤½ÄÀ» ±¸¼ºÇÏ´Â °¢Ç×ÀÇ °è¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ µÎ±ÙÀ» pair ŸÀÔ¿¡ ´ã¾Æ ¹ÝȯÇÑ´Ù. typedef complex dcomplex; pair quadratic(dcomplex a, dcomplex b, dcomplex c) { dcomplex root = sqrt(b * b - 4.0 * a * c); a *= 2.0; return make_pair((-b + root) / a, (-b - root) / a); }