[問題] 數值超過正負300多次方解決辦法?

看板Fortran作者 (狗屁昭)時間7年前 (2016/08/08 20:41), 7年前編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/1
大家好,目前我使用的是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

08/09 00:54, , 1F
為什麼不先取對數......
08/09 00:54, 1F

08/09 11:14, , 2F
找一個函數先做mapping啊 例如一樓說的
08/09 11:14, 2F
是指說對分子分母都取對數嗎? 但本身DBSI0與DBSI1回傳的值超過320次方時整個程式就停了 ※ 編輯: r1000000 (140.113.223.116), 08/09/2016 13:41:03

08/24 14:23, , 3F
判斷LN1(I)*RSD太大時用asymptotic series算啊
08/24 14:23, 3F

08/31 17:57, , 4F
08/31 17:57, 4F

08/31 18:01, , 5F
這個函式庫可以算很大的數值.不知道可否滿足你的需要
08/31 18:01, 5F
文章代碼(AID): #1Ng7tvWU (Fortran)
文章代碼(AID): #1Ng7tvWU (Fortran)