如何防止/检测使用EXP()的Postgresql计算中的下溢

时间:2009-01-05 17:56:45

标签: sql postgresql underflow

我在一个使用EXP(x)函数的查询中收到超出范围的值:来自pgsql的下溢错误。 x的什么值会触发这个?如何预防或检测它?

2 个答案:

答案 0 :(得分:2)

函数exp称为指数函数,其反函数是自然对数,或对数e的对数。数e通常也被定义为自然对数的基数

换句话说,exp(x)和e ^ x是相同的函数。但是,由于e是一个超越数,因此是不合理的,因此不能准确地给出它的值。

截断到10位小数的e的数值是2.71828 1828

因此,函数exp(x)在技术上对x的所有值都有效,但实际上,您可以限制它们。例如,如果将它们限制为+/- 700,则应覆盖范围

的所有情况
exp(700) = 1.01423205 × 10^304
exp(-700) = 9.85967654 × 10^-305

更多信息取决于您的应用

答案 1 :(得分:1)

我正在使用的解决方法是使用'CASE'来计算我的参数的检查范围,而不是如果它超出合理的范围则回退到默认值:

SELECT CASE WHEN p > 100 THEN 0
       ELSE .1 ^ p
       END;