complex Ŭ·¡½º´Â ÅÛÇø´ Ŭ·¡½ºÀÌ´Ù. º¹¼Ò¼ö¿Í º¹¼Ò¼ö ¿¬»êµéÀÌ
ÇÊ¿äÇÒ ¶§ »ç¿ëÇÏ¸é µÈ´Ù. complex Ŭ·¡½º´Â C++À» ´Ù·ç´Â
Ã¥µé¿¡¼ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÒ ¶§ ÀÚÁÖ ¾²ÀÌ´Â ¿¹Á¦¶ó¼, C++À»
°øºÎÇϼ̴ø ºÐµéÀ̶ó¸é ÇѹøÂë Á¤ÀÇÇغÃÀ» Ŭ·¡½ºÀÏ °ÍÀÌ´Ù. C++ Ç¥ÁØ¿¡ Æ÷ÇÔµÈ
complex Ŭ·¡½º´Â ÅÛÇø´À¸·Î Á¤ÀǵǾî ÀÖ°í, º¹¼Ò¼ö¿¡ Á¤ÀǵǾî
ÀÖ´Â ¿¬»êµéÀÌ C++¿¡¼ Á¦°øÇÏ´Â ¼öÄ¡ °ü·Ã
ŸÀÔµé(int, float, double, long double,
...)°ú »ç¿ëÇϴµ¥ ¾Æ¹«·± Á¦¾àÀÌ ¾øµµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù.
20.1.1 Include ÈÀÏ
º¹¼Ò¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº complex Çì´õÈÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù.
#include <complex>
¿©±â¼´Â º¹¼Ò¼ö¸¦ »ý¼ºÇÏ´Â ¹æ¹ý°ú º¹¼Ò¼öµé°£ÀÇ ¿¬»ê¿¡ °üÇØ ¼³¸íÇϱâ·Î ÇÑ´Ù.
20.2.1 º¹¼Ò¼öÀÇ ¼±¾ð, ±ØÇü½Ä, º¸¼ö ±¸Çϱâ
complex ŸÀÔÀÇ °´Ã¼¸¦ ¼±¾ðÇϱâ À§Çؼ´Â ¸ÕÀú º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ Å¸ÀÔÀ» ¹«¾ùÀ¸·Î ÇÒÁö¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù. º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎÀÇ Å¸ÀÔÀº ÅÛÇø´ ÀÎÀÚ·Î ³Ñ°ÜÁÖ¸ç, À̶§, ÀÎÀÚÀÇ Å¸ÀÔÀº C++¿¡¼ Á¦°øÇÏ´Â ºÎµ¿¼Ò¼ö µ¥ÀÌÅÍ Å¸ÀÔ¸¸ÀÌ Çã¿ëµÈ´Ù. Áï, float, double, long double ¼¼°¡Áö¸¸ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù.
complex Ŭ·¡½º´Â ³×°¡Áö ÇüÅÂÀÇ »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖ´Ù. 1)ÀÎÀÚ°¡ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é, ½Ç¼öºÎ¿Í Çã¼öºÎ°¡ ¸ðµÎ 0ÀÎ º¹¼Ò¼ö¸¦ »ý¼ºÇÏ°í, 2)ÀÎÀÚ°¡ Çϳª¸¸ ÁÖ¾îÁö¸é, ÀÌ´Â ½Ç¼öºÎÀÇ °ªÀ¸·Î ÇÒ´çµÇ¸ç, Çã¼öºÎ´Â 0ÀÎ º¹¼Ò¼ö¸¦ »ý¼ºÇÑ´Ù. 3)ÀÎÀÚ°¡ µÎ°³ÀÎ °æ¿ì¿¡´Â ½Ç¼öºÎ°¡ ù¹ø° ÀÎÀÚÀÇ °ªÀ» Çã¼öºÎ°¡ µÎ¹ø° ÀÎÀÚÀÇ °ªÀ» °¡Áö´Â º¹¼Ò¼ö¸¦ »ý¼ºÇÑ´Ù. 4)¸¶Áö¸·Àº º¹»ç »ý¼ºÀڷμ, ´Ù¸¥ º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ½Ç¼öºÎ¿Í Çã¼öºÎ°¡ µ¿ÀÏÇÑ º¹¼Ò¼ö¸¦ »ý¼ºÇس½´Ù.
complex<double> com1; // 0 + 0i complex<double> com2(3.14); // 3.14 + 0i complex<double> com3(1.5, 3.14); // 1.5 + 3.14i complex<double> 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) + sin(1.8) i)
conj()´Â ÀÎÀÚ·Î ÁÖ¾îÁø º¹¼Ò¼öÀÇ º¸¼ö¸¦ ±¸ÇÒ ¶§ »ç¿ëÇÑ´Ù. ÁÖ¾îÁø º¹¼Ò¼ö°¡ x+yi¶ó¸é, ÀÌ°ÍÀÇ º¸¼ö´Â x-yi°¡ µÈ´Ù.
complex<double> com5 = conj(com3); // com5: 1.5 - 3.14i
¢º ÇÔ¼ö¿Í ¸â¹ö ÇÔ¼ö |
º¹¼Ò¼ö¿¡ °ü·ÃµÈ ¿¬»êµéÀº real()°ú imag()¸¦ Á¦¿ÜÇϸé(À̵éÀº ¸â¹öÇÔ¼ö), ³ª¸ÓÁö´Â ¸ðµÎ ¸â¹öÇÔ¼ö°¡ ¾Æ´Ñ ÀÏ¹Ý ÇÔ¼ö¸¦ ÅëÇØ ¼öÇàµÈ´Ù. |
¸â¹öÇÔ¼ö·Î Á¦°øµÇ´Â real()¿Í imag()´Â °¢°¢ º¹¼Ò¼öÀÇ ½Ç¼öºÎ¿Í Çã¼öºÎ¸¦ ¹ÝȯÇÑ´Ù. À̵éÀº ¸â¹öÇÔ¼ö»Ó¸¸ ¾Æ´Ï¶ó, ÀÏ¹Ý ÇÔ¼öÀÇ ÇüÅ·ΠȣÃâÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ µÎ ÁÙÀº ¿ÏÀüÈ÷ ¶È°°Àº °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
cout << com1.real() << "+" << com1.imag() << "i" << endl; cout << real(com1) << "+" << imag(com1) << "i" << endl;
+, -, *, / ¿¬»êÀÚµéÀº °¢°¢ º¹¼Ò¼öÀÇ µ¡¼À, »¬¼À, °ö¼À, ³ª´°¼ÀÀ» ¼öÇàÇϴµ¥ »ç¿ëÇÑ´Ù. ÀÌµé ¿¬»êÀÚ´Â µÎ º¹¼Ò¼ö°£ÀÇ »çÄ¢¿¬»êÀ» ¼öÇàÇϸç, ¹°·Ð º¹¼Ò¼ö¿Í ½Ç¼ö°£ÀÇ »çÄ¢¿¬»ê¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. +=, -=, *=, /= ¿¬»êÀÚµµ Á¤ÀǵǾî ÀÖ´Ù.
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+4i'´Â
(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;
±âÁ¸¿¡ ½Ç¼öÇü ŸÀÔ¿¡ ´ëÇØ Á¤ÀǵǾîÀÖ´ø »ï°¢ÇÔ¼öµé(sin(), cos(), tan(), sinh(), cosh(), tanh())Àº º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀÏ ¼ö ÀÖµµ·Ï È®ÀåµÇ¾ú´Ù. ÀÌµé °¢°¢Àº º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ º¹¼Ò¼ö°ªÀ» ¹ÝȯÇÑ´Ù.
ÃÊ¿ùÇÔ¼ö(exp(), log(), log10(), sqrt())µéµµ º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹ÞÀ» ¼ö ÀÖ°Ô È®ÀåµÇ¾ú´Ù. º¹¼Ò¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ º¹¼Ò¼ö¸¦ ¹ÝȯÇÑ´Ù.
Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼´Â ¿©·¯°¡Áö ÇüÅÂÀÇ Áö¼öÇÔ¼ö pow()¸¦
Á¤ÀÇÇÏ°í Àִµ¥, ¹ØÀÌ º¹¼Ò¼öÀÌ°í Áö¼ö°¡ Á¤¼ö/º¹¼Ò¼ö/½Ç¼öÀÎ °Í, ¹ØÀÌ ½Ç¼öÀÌ°í
Áö¼ö°¡ º¹¼Ò¼öÀÎ °ÍµéÀÌ ÀÖ´Ù.
ÀÌÂ÷¹æÁ¤½Ä ax2 + bx + c = 0 ÀÇ ±ÙÀº ´ÙÀ½ °ø½ÄÀ¸·Î ±¸ÇÒ ¼ö ÀÖ´Ù.
x = (-b + sqrt(b2 - 4ac)) / 2a¶Ç´Â
x = (-b - sqrt(b2 - 4ac)) / 2a
´ÙÀ½ ÇÔ¼ö´Â ÀÌÂ÷¹æÁ¤½ÄÀ» ±¸¼ºÇÏ´Â °¢Ç×ÀÇ °è¼ö¸¦ ÀÎÀÚ·Î ¹Þ¾Æ µÎ±ÙÀ» ±¸ÇÑ µÚ, À̵éÀ» pair °´Ã¼¿¡ ´ã¾Æ ¹ÝȯÇÑ´Ù.
typedef complex<double> dcomplex; pair<dcomplex, dcomplex> 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); }