[問題] 函式的表示方式

看板C_and_CPP作者 (THLi)時間14年前 (2011/11/20 19:31), 編輯推噓1(1021)
留言22則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 有一數值分析題目的範例 使用的程式碼 其中一段為 /* Change function F for a new problem */ double F(double X) { double f; f = exp(2*X)*sin(3*X); return f; } 現在題目只將方程式更改為 f = (X^2)*ln((X^2)+1) 於是我將程式碼中函數值改為 f = (X^2)*log((X^2)+1) 這樣會執行失敗 但如果我將方程式列為 f = X*log(X+1)則能正常執行 於是我想問是不是次方還需要更改別的程式碼 不好意思 我是個完全初學的人... 附上程式碼 http://codepad.org/G6zZaqwv 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 48 invalid operands of types `double' and `int' to binary `operator^' 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/G6zZaqwv 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.169.157.33

11/20 19:33, , 1F
C語言的"^"不代表次方
11/20 19:33, 1F

11/20 19:34, , 2F
可以改用pow函式
11/20 19:34, 2F

11/20 19:36, , 3F
另外 main沒有return type
11/20 19:36, 3F

11/20 19:45, , 4F
別用pow呀...x^2寫成x*x
11/20 19:45, 4F

11/20 19:56, , 5F
謝謝~我剛剛用pow寫出來了 樓上的方式更簡單XD
11/20 19:56, 5F

11/20 20:05, , 6F
整數次方的確是不建議pow...因為值可能會不精確...
11/20 20:05, 6F

11/20 20:13, , 7F
請問pow不精準,有沒有其他建議的能用?
11/20 20:13, 7F

11/20 20:22, , 8F
不如自己寫XD
11/20 20:22, 8F

11/20 21:03, , 9F
應該沒d大說的這問題。
11/20 21:03, 9F

11/20 21:14, , 10F
簡單的整數次方請直接乘就好,效率比較高、也比較準
11/20 21:14, 10F

11/20 21:15, , 11F
之前在板上看到有人測過.... pow的計算時間有點慢,但是計
11/20 21:15, 11F

11/20 21:16, , 12F
算時間不會隨著次方數加大而增加,但直接乘的話,會。
11/20 21:16, 12F

11/20 21:17, , 13F
那時候就有這個結論:大數或非整數次方才用pow
11/20 21:17, 13F

11/20 22:06, , 14F
因為六樓說不建議pow,所以我才這樣問0.0
11/20 22:06, 14F

11/20 22:48, , 15F
對不起,我上面指的是 Ts~大才對,沒不精準的問題。至於
11/20 22:48, 15F

11/20 22:48, , 16F
速度的話,因pow有考量指數為floating情況,用了數值分析
11/20 22:48, 16F

11/20 22:49, , 17F
再進行迭代,所以整數次方速度一定比自己寫的還慢.若真
11/20 22:49, 17F

11/20 22:49, , 18F
在意速度的話,可先google fastpower, O( log2(n) )
11/20 22:49, 18F

11/20 22:50, , 19F
有興趣的話,再一起探討非整數次方可能怎麼做.便知多慢.
11/20 22:50, 19F

11/21 00:38, , 20F
樓上, (int)pow(100, 2) 可能會是9999 ...
11/21 00:38, 20F

11/21 00:38, , 21F
因為pow出來可能是9999.999999xxx @@
11/21 00:38, 21F

11/22 17:34, , 22F
pow 用分治法自己寫,O(logn)
11/22 17:34, 22F
文章代碼(AID): #1EoEK8DL (C_and_CPP)