[問題] acos:DOMAIN error ..

看板C_and_CPP (C/C++)作者 (x1988)時間15年前 (2010/11/06 12:09), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 目前在使用BCB算角度時,出現ACOS:DOMAIN ERROR 的錯誤, double ff=acos(abs(a*a+b*b-c*c)/(2*a*b)); 最後錯誤ff的值為+nan ,不知道該如何解決? 麻煩各位大大 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) bcb 有問題的code: (請善用置底文標色功能) 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.193.187

11/06 12:43, , 1F
(double)abs(a*a+b*b-c*c)/(double)(2*a*b)
11/06 12:43, 1F

11/06 12:52, , 2F
把2改成2.0
11/06 12:52, 2F

11/06 14:45, , 3F
已經改了 可是還是一樣
11/06 14:45, 3F

11/06 14:59, , 4F
請問你a,b,c值各是多少?
11/06 14:59, 4F

11/06 15:23, , 5F
a=7.211 b=3.605 c=10.816
11/06 15:23, 5F

11/06 20:47, , 6F
直接算是剛好 acos(abs(-1.0)) 對吧?? 試著abs後減一個
11/06 20:47, 6F

11/06 20:48, , 7F
很小的數試試(比如0.00001), 再做acos; 推測是浮點計算
11/06 20:48, 7F

11/06 20:48, , 8F
誤差, 送出了剛好略大於1.0一點點的值, acos就不爽了:)
11/06 20:48, 8F

11/07 18:53, , 9F
可以了 謝謝
11/07 18:53, 9F

11/07 18:59, , 10F
如果確定是這樣, 其實比較合理的作法是判斷abs出來後的
11/07 18:59, 10F

11/07 19:00, , 11F
值是否>1.0, 是的話改送1.0進acos喔:)
11/07 19:00, 11F
文章代碼(AID): #1CrDK4xa (C_and_CPP)
文章代碼(AID): #1CrDK4xa (C_and_CPP)