4

EXP(x) 関数を使用するクエリで、pgsql からアンダーフロー エラーの範囲外の値を受け取りました。これをトリガーする x の値は? どうすればそれを防止または検出できますか?

4

2 に答える 2

4

関数expは指数関数と呼ばれ、その逆関数は自然対数、つまりeを底とする対数です。数eは、自然対数の底としても一般的に定義されます。

つまり、exp(x)とe^xは同じ関数です。ただし、eは超越数であり、したがって無理数であるため、その値を正確に指定することはできません。

小数点以下10桁に切り捨てられたeの数値は2.718281828です。

したがって、関数exp(x)は、xのすべての値に対して技術的に有効ですが、実際には、それらを制限することができます。たとえば、それらを+/- 700に制限する場合は、範囲をカバーするすべてのケースをカバーする必要があります

exp(700) = 1.01423205 × 10^304
exp(-700) = 9.85967654 × 10^-305

それ以上はアプリケーションによって異なります

于 2009-01-29T15:18:30.993 に答える
1

私が使用している回避策は、「CASE」を使用して引数のチェック範囲を把握し、妥当な範囲外の場合はデフォルトに戻すことです。

SELECT CASE WHEN p > 100 THEN 0
       ELSE .1 ^ p
       END;
于 2013-07-08T18:37:59.880 に答える