急求解答!fortran运行时出现run-time error M6021:MATH - log:DOMAIN error,怎解答,
答案:1 悬赏:70 手机版
解决时间 2021-02-14 06:19
- 提问者网友:自食苦果
- 2021-02-13 15:20
急求解答!fortran运行时出现run-time error M6021:MATH - log:DOMAIN error,怎解答,
最佳答案
- 五星知识达人网友:笑迎怀羞
- 2021-02-13 15:52
这是很常见的算法错误,通常这种错误是不能再编译的时候发现的,因为者往往不是由语法错误引起的。M6201的错误信息可以到编译器的帮助文件中查找,大意就是自然对数的底超出范围,也就是说在计算log(N)的时候,括号里的N变成负数了,这时候运行的程序就会报错。这需要程序员对算法进行排查优化才能解决这种失误。所以,请自己检查并改进算法的代码吧。追问我在程序中,log()加了abs(),不可能是负的追答你是怎么加的,把代码贴出来追问tao(j)=sigma(i)*(mu0+a*log(abs(yout(2)/v1))+psi(i))
就是这样加的追答还有一种情况可能导致log预算错误的就是,底数溢出。你的代码看起来所有变量应该都是单精度的,这样log后边括号里的数字就会有上限,你应该检查一下可能是v1变为0(或是一个非常小的数),也可能是yout(2)变为一个很大的数。试试看追问v1的数量级是很小e-9,那要怎么办追答使用双精度的变量试试,如果不行,就换下算法,把握住变量的变化程度。
就是这样加的追答还有一种情况可能导致log预算错误的就是,底数溢出。你的代码看起来所有变量应该都是单精度的,这样log后边括号里的数字就会有上限,你应该检查一下可能是v1变为0(或是一个非常小的数),也可能是yout(2)变为一个很大的数。试试看追问v1的数量级是很小e-9,那要怎么办追答使用双精度的变量试试,如果不行,就换下算法,把握住变量的变化程度。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯