看板 Fortran 關於我們 聯絡資訊
大家好,目前我使用的是XE2013 with VS2012 目前碰到了一個問題是使用imsl計算bessel function 當回傳數值大於320次方時程式直接shut down 舉例來說 MA(I,J)=DBSI0(LN1(I)*RSD)/(LN1(I)*DBSI1(LN1(I)*RSD)) 其中DBSI0與DBSI1是imsl的double precision 的 bessel function指令 當LN1(I)*RSD的值大於700時,會導致DBSI0與DBSI1回傳的值分別都大於320次方 實際上在數學運算時MA(I,J)算出來差不多10的-2到-3之間,但卻會因為分母與分子回傳 的值大於320次方而導致程式終止 有沒有先進能提供方法讓數值超過320次方依然能運算? 或是有甚麼解決方法,先謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.223.116 ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1470660089.A.81E.html
sexyrickysky: 為什麼不先取對數...... 08/09 00:54
noonee: 找一個函數先做mapping啊 例如一樓說的 08/09 11:14
是指說對分子分母都取對數嗎? 但本身DBSI0與DBSI1回傳的值超過320次方時整個程式就停了 ※ 編輯: r1000000 (140.113.223.116), 08/09/2016 13:41:03
kerwinhui: 判斷LN1(I)*RSD太大時用asymptotic series算啊 08/24 14:23
ottoli: 試試這個? http://myweb.lmu.edu/dmsmith/FMLIB.html 08/31 17:57
ottoli: 這個函式庫可以算很大的數值.不知道可否滿足你的需要 08/31 18:01