Re: [問題] 物理的數值模擬適合用C++嗎?

看板C_and_CPP作者 (好悶, 迷惘~~)時間12年前 (2012/04/21 00:57), 編輯推噓4(409)
留言13則, 8人參與, 最新討論串3/3 (看更多)
※ 引述《famayo (砝碼)》之銘言: : 因為最近開始想學程式語言 : 但是苦不知該從哪種語言開始下手 : 於是就想到了最耳熟能想的C++ : 但是又聽到有些人說C++ 是比較舊的語言 : (我也不知有什麼是新的= =) : 因此我想問問 C++能做的事情應該很多吧? : 譬如說現在有哪些系統是用C++開發的呢 : 臉書 無名小站是嗎? : 還有就是 假設我要做物理的數值模擬 : 用C++適當嗎? 因為覺得它應該比fortran matlab來得多用途 : 如果C++不是各位最推薦的語言 : 那麼哪總才最推薦呢 (數值模擬為主 搞不好還有其他需求) : 感謝各位解惑 單純討論到"快"這件事情 1. 最快仍然是核心部分直接寫組合語言 (或是inline asm) 2. C/C++有機會寫出類似組合語言的效能, 但在一般情況下, 其實C/C++有很多效能上的陷阱 為了轉換物理或是數學上的式子, 菜鳥寫出來的程式碼, 通常效能很糟糕 編譯器難以最佳化 (應該說, 要寫的"快", 就不能照翻數學式, 這需要經驗) 而且C++老手有時太過於使用OO後, C++語言的特性反而會導致效能不佳 3. Fortran語言本身非常高階, 且適合將物理/數學式, 很直覺得就用fortran的語言表達出來, 再加上本身語法上直接支援向量運算 編譯器發展了非常久, 基本上如果是物理/數學式照翻, 就算是菜鳥寫的程式碼 經過編譯器最佳化後, 效率可能非常非常的高 如果是新手~ 用fortran寫可能是又快又方便 但如果是為了求快速開發... 或許matlab更是取得一個更佳的平衡點 (有太多函數可以直接呼叫, 呼叫後極有可能是直接對應到效率很高的程式庫 整體的執行效率也可以很高, 開發又輕鬆, 個人非常推薦使用matlab) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.108.22

04/21 01:00, , 1F
用matlab就要用矩陣運算,盡量不要用for,效能差很多
04/21 01:00, 1F

04/21 01:58, , 2F
現在不是有JIT compiller了? loop也會被最佳化吧
04/21 01:58, 2F

04/21 03:15, , 3F
matlab旳for loop是致命傷…
04/21 03:15, 3F

04/21 07:42, , 4F
感謝 !
04/21 07:42, 4F

04/21 10:42, , 5F
可是自己寫ASM不見得寫得贏compiler XD
04/21 10:42, 5F

04/21 11:06, , 6F
FORTRAN也不是真的「非常」高階啦,不過他的陣列可以
04/21 11:06, 6F

04/21 11:06, , 7F
割一條或一塊來計算,威力是很強沒錯。
04/21 11:06, 7F

04/21 11:08, , 8F
我很欣賞他在語言階段直接支援**和複數,但是就技術而言
04/21 11:08, 8F

04/21 11:08, , 9F
如今這好像也沒啥,很方便是真的。
04/21 11:08, 9F

04/21 18:17, , 10F
可以考慮 python+numpy(數學套件)+matplotlib(繪圖套件)
04/21 18:17, 10F

04/21 18:18, , 11F
若有必要,底層可用c/c++加速計算
04/21 18:18, 11F

04/21 18:20, , 12F
要是計算量真的太大,c/c++的部份可以再進一步平行處理.
04/21 18:20, 12F

04/22 00:22, , 13F
matlab請直接用矩陣或向量運算... 不要自己跑for loop
04/22 00:22, 13F
文章代碼(AID): #1FaPMHR_ (C_and_CPP)
文章代碼(AID): #1FaPMHR_ (C_and_CPP)