Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
我根據C_H_M 大大的範例,分別代入好幾個常數來驗算反三角函數的的程式,結果都正確,再次感謝C_H_M 大大的熱心幫忙。在Watch視窗中要觀察變數記得要將Size設為24Bit。
發表於: 2008/3/24 9:25
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
感謝高手指點迷津,C_H_M 大大對 Compiler 真是了解,研究程式中.....
發表於: 2008/3/21 17:42
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
報告版大:
我原本是用 PICC 8.05版,後來升級到9.6版後顯示就正常了。 今日又發現有其它的問題,就是呼叫一個 atan 反三角函數運算,但是結果一直不正確,可以呼叫昨日試的 sqrt 開方函數結果是正確的,目前還在嘗試中。 請問 C_H_M 大大,程式要怎麼貼才能像你 PO 的那樣整齊,謝謝。
發表於: 2008/3/21 15:02
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
版主
|
PSIR,
可否麻煩你告知一下所使用的 PICC 版本,Thanks, C_H_M 大大, 謝謝你的大力協助。
發表於: 2008/3/21 11:25
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
程式可以動了,跟大家報告一下:
原來是我的 Compiler 版本太舊,更新成較新版本之後就可以看到正確的運算結果,連 Watch 視窗的內容也都很清楚。 感謝所有協助小弟的夥伴們。
發表於: 2008/3/20 17:39
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
您好:
我用的 MPLAB 是7.6版,不知道這是否有影響。 請問您執行的結果可以進入 BUF=1; 這一行嗎? 為什麼我的不行?問題到底在哪裡呢?
發表於: 2008/3/20 16:36
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
我把你的程式複製下來試了一下, 得到了正確的結果.
source code 上看起來也應該是正確的. 我能給你的建議只有重新 Build All 一次看看是否會正確了.
發表於: 2008/3/20 16:25
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
資深會員
|
C_H_M 您好:
我寫了一個測試程式張貼如下: CPU用16F917,使用軟體模擬模式,其中 sqrt 函數和上面您貼的一樣。 #include <pic.h> //會使用pic16f91x.h #include <math.h> double sqrt_in; double sqrt_root; unsigned char BUF; double sqrt(double x); /*------------------------------------------------------------------------------*/ // MAIN PROGRAM AREA /*------------------------------------------------------------------------------*/ void main(void){ sqrt_in = 100; sqrt_root = sqrt(sqrt_in); if(sqrt_root == 10){ BUF=1; } else{ BUF=0; } } //main //====================================== double sqrt(double x){ double og, ng; short niter; int expon; if(x < 0.0) { return 0.0; } if(x == 0.0) { return 0.0; } og = x; if(og < 1.0) og = 1.0/og; og = frexp(og, &expon); og = ldexp(og, expon/2);// make an educated guess if(x < 1.0) og = 1.0/og; niter = 20; do { ng = (x/og + og)/2.0; if(ng == og) break; og = ng; } while(--niter); return og; } //====================================== 我有在 properties 中開啟屬性視窗,點選 Size 的項目更改為 24 bits(兩個變數均有改),然後當執行 sqrt_in = 100; 這行後,sqrt_in 顯示100.000000 沒有錯,但是當執行下一行時,結果卻不是 10 而是 3.24513602e+032,所以在下面的判斷式中,就無法進入 BUF=1; 這一行,請問要如何做讓計算出來的結果可以符合判斷式。 謝謝。
發表於: 2008/3/20 15:39
|
|||
|
Re: 請教C語言如何做開根號運算
|
||||
---|---|---|---|---|
中級會員
|
開啟 Watch 監看視窗,
選擇 sqrt_in 項目, 按滑鼠右鍵開啟選單, 點選 properties 開啟屬性視窗. 點選 Size 的項目更改為 24 bits. 相同的, 也更改 sqrt_root 的屬性成為 24 bits. 這樣應該就可以看得到正確的結果值了.
發表於: 2008/3/20 15:12
|
|||
|