精華區beta C_and_CPP 關於我們 聯絡資訊
以下是小弟的code, 簡單的測試C++ STL的複數資料型態: #include <iostream> #include <complex> using namespace std; int main() { complex <double> x = (0.1, 0.2); complex <double> mu = (0.2, 0.6); //cout<<"Please input the value of x: "; //cin>>x; //cout<<"Please input the value of mu: "; //cin>>mu; cout<<"x = "<<x<<endl; cout<<"mu = "<<mu<<endl<<endl; system("pause"); return 0; } 碰到的問題是, 照理說 x = 0.1 + 0.2i, mu = 0.2 + 0.6i 在用cout輸出時應分別是 (0.1, 0.2) 與(0.2, 0.6) 但在我的電腦上出出卻變成 (0.2, 0) 與(0.6, 0) 也就是說, 實數部被虛數部取代, 虛數部卻變成了0 但是若是讓使用者乖乖輸入x 和mu 的值 (就是我comment掉的那幾行) 就能正確cout輸出 請問這當中有什麼問題嗎? 我使用gcc 4.0.1編譯器, Fedora Core 4作業系統 謝謝 -- Welcome, Willkommen, Velkommen: http://homepage.ntu.edu.tw/~r94543035/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.171.78
tititata:在宣告初始值的時候把 = 去掉就可以了 09/22 10:32
tititata:但是在運算時(複數相加、乘)要有等號 09/22 10:32
cation234:非常感謝 您幫了在下不少忙 09/22 12:11
> -------------------------------------------------------------------------- < 作者: PiscesGold (黃金雙魚宮) 看板: C_and_CPP 標題: Re: [問題] C++複數的初始值設定 時間: Thu Sep 22 05:08:26 2005 應該是初始化的時候那兩條語句語義不符 我想應該把圓括號「(」、「)」改成花括號「{」、「}」 ※ 引述《cation234 (貓離子)》之銘言: : 以下是小弟的code, 簡單的測試C++ STL的複數資料型態: : #include <iostream> : #include <complex> : using namespace std; : int main() : { : complex <double> x = (0.1, 0.2); ~~~~~~~~~~~這里的結果是0.2 : complex <double> mu = (0.2, 0.6); ~~~~~~~~~~~這個是0.6 : //cout<<"Please input the value of x: "; : //cin>>x; : //cout<<"Please input the value of mu: "; : //cin>>mu; : cout<<"x = "<<x<<endl; : cout<<"mu = "<<mu<<endl<<endl; : system("pause"); : return 0; (刪除) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.232.94.201 > -------------------------------------------------------------------------- < 作者: cation234 (貓離子) 看板: C_and_CPP 標題: Re: [問題] C++複數的初始值設定 時間: Thu Sep 22 12:13:12 2005 在下找到了這個 說明了為什麼會有這種問題 http://www-h.eng.cam.ac.uk/help/tpl/languages/C++/complex.html ※ 引述《PiscesGold (黃金雙魚宮)》之銘言: : 應該是初始化的時候那兩條語句語義不符 : 我想應該把圓括號「(」、「)」改成花括號「{」、「}」 : ※ 引述《cation234 (貓離子)》之銘言: : : 以下是小弟的code, 簡單的測試C++ STL的複數資料型態: : : #include <iostream> : : #include <complex> : : using namespace std; : : int main() : : { : : complex <double> x = (0.1, 0.2); : ~~~~~~~~~~~這里的結果是0.2 : : complex <double> mu = (0.2, 0.6); : ~~~~~~~~~~~這個是0.6 : : //cout<<"Please input the value of x: "; : : //cin>>x; : : //cout<<"Please input the value of mu: "; : : //cin>>mu; : : cout<<"x = "<<x<<endl; : : cout<<"mu = "<<mu<<endl<<endl; : : system("pause"); : : return 0; : (刪除) -- Welcome, Willkommen, Velkommen: http://homepage.ntu.edu.tw/~r94543035/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.165.32
tititata:讚! 09/22 13:06
> -------------------------------------------------------------------------- < 作者: khoguan (Khoguan Phuann) 看板: C_and_CPP 標題: Re: [問題] C++複數的初始值設定 時間: Fri Sep 23 01:07:30 2005 ※ 引述《cation234 (貓離子)》之銘言: : 在下找到了這個 說明了為什麼會有這種問題 : : http://www-h.eng.cam.ac.uk/help/tpl/languages/C++/complex.html 那裡面有幾句話不對。 "In fact, c2=(3,7) is equivalent to c2=3,7. C++'s "," operator suppresses the value of the first operand in favour of the second, so c2=3,7 is equivalent to c2=7." 當寫成 c2=(3,7); 時, c2 會變成 7, 而 3 是多餘的,沒效果。 但寫成 c2=3,7; 時, c2 會變成 3, 而 7 是多餘的,沒效果。 請自行實驗看看。 至於其道理,則是 comma operator 比 assignment operator 的優先權 還要低。 c2=3,7; 等同於 (c2=3), 7; : : : 以下是小弟的code, 簡單的測試C++ STL的複數資料型態: : : : #include <iostream> : : : #include <complex> : : : using namespace std; : : : int main() : : : { : : : complex <double> x = (0.1, 0.2); : : ~~~~~~~~~~~這里的結果是0.2 : : : complex <double> mu = (0.2, 0.6); : : ~~~~~~~~~~~這個是0.6 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.208.168