0

どこにあるのかという質問がありますexp。番号を見つける必要があります。場合によっては、expが大きすぎてオーバーフローエラーが返されることもあれば、関数の引数expが大きすぎることもあります。そのような場合、任意の値を返す必要があります。

例(機能しません)

select LEAST(exp(1000), 1::double precision);

ここで、を見つけようとしますexp(1000)。大きすぎる場合は1を返します。

Postgresでこれを行うにはどうすればよいですか?

4

1 に答える 1

0

このようなもの:

create or replace function safe_exp(val double precision)
  returns double precision
  language plpgsql
as
$body$
declare
  result double precision;
begin
  begin
    result := exp(val);
  exception 
    when others then 
      result := 1.0;
  end;
  return result;
end;
$body$

ただし、例外ブロックが原因で、これは「通常の」exp()呼び出しよりも遅くなります。

于 2012-09-25T09:35:27.627 に答える