找回密码
 注册
查看: 2430|回复: 3

请教:UDF中函数exp(...)输出值为0.0 ,怎么处理呢?

[复制链接]
发表于 2012-8-19 11:31:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好!
在写有关蒸汽凝结的程序,在求解计算中发现凝结核的值总为0.0,寻找其原因,发现了问题所在。
凝结成核率的UDF中有下面的语句:
I_t=-4.0*PI*C_UDMI(c,t,Rc)*C_UDMI(c,t,Rc)*C_UDMI(c,t,Ps)/(3.0*Kb*C_T(c,t));
I_two=exp(I_t);
Message("\n  I_t=%e ",I_t);
结果显示I_two的值总为0.0,而我将exp(...)括号中的值输出,显示为 -80206.0 。
也就是说exp(-80206.0)的值为0.0 。
这是什么情况呢?应该如何处理?
望不吝赐教指点!
谢谢!
发表于 2012-8-20 08:55:21 | 显示全部楼层
原帖由 JohnQiang 于 2012-8-19 03:31 发表
大家好!
在写有关蒸汽凝结的程序,在求解计算中发现凝结核的值总为0.0,寻找其原因,发现了问题所在。
凝结成核率的UDF中有下面的语句:
I_t=-4.0*PI*C_UDMI(c,t,Rc)*C_UDMI(c,t,Rc)*C_UDMI(c,t,Ps)/(3.0*Kb*C_T ...

这到底要算啥啊,exp(-100)就已经是很小的数值了,等于3.72e-44。你指数上负值这么大能不为零吗。自己检查一下算法吧。
 楼主| 发表于 2012-8-20 09:25:10 | 显示全部楼层
原帖由 gearboy78 于 2012-8-20 08:55 发表

这到底要算啥啊,exp(-100)就已经是很小的数值了,等于3.72e-44。你指数上负值这么大能不为零吗。自己检查一下算法吧。

谢谢 gearboy78
你说的很对,exp(-100)就已经很小了。跟我的老师讨论后认为有一定的合理性,只是要对括号内的值(参数)做条件限制(暂时只能这样处理)。
这是在算成核率,依据是J.B.Young的成核率公式(见附件)。公式中有一项exp(...),括号里的一个参数r*(临界半径)的数量级在-10上下,当数量级约为-9时,导致括号内的绝对值很大,从而exp(...)值为0.0;当r*数量级约为-10时,exp(...)括号内的绝对值会缩小约100倍,这就相当可观了,exp(...)不再为0.0,此时,成核率J的数量级猛增到22或更大。

成核率

成核率
 楼主| 发表于 2012-8-20 09:27:55 | 显示全部楼层
原帖由 JohnQiang 于 2012-8-20 09:25 发表

谢谢 gearboy78
你说的很对,exp(-100)就已经很小了。跟我的老师讨论后认为有一定的合理性,只是要对括号内的值(参数)做条件限制(暂时只能这样处理)。
这是在算成核率,依据是J.B.Young的成核率公式(见附件 ...

问题基本解决,如上所述。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表