作者r1000000 (狗屁昭)
看板Fortran
标题[问题] 数值超过正负300多次方解决办法?
时间Mon Aug 8 20:41:23 2016
大家好,目前我使用的是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://webptt.com/cn.aspx?n=bbs/Fortran/M.1470660089.A.81E.html
1F:推 sexyrickysky: 为什麽不先取对数...... 08/09 00:54
2F:→ noonee: 找一个函数先做mapping啊 例如一楼说的 08/09 11:14
是指说对分子分母都取对数吗?
但本身DBSI0与DBSI1回传的值超过320次方时整个程式就停了
※ 编辑: r1000000 (140.113.223.116), 08/09/2016 13:41:03
3F:→ kerwinhui: 判断LN1(I)*RSD太大时用asymptotic series算啊 08/24 14:23
5F:推 ottoli: 这个函式库可以算很大的数值.不知道可否满足你的需要 08/31 18:01