Как я могу предотвратить / обнаружить недостаток в вычислениях Postgresql, которые используют EXP () - PullRequest
2 голосов
/ 05 января 2009

Я получаю значение вне диапазона: ошибка недостаточного значения из pgsql в запросе, использующем функцию EXP (x). Какие значения х вызывают это? Как мне предотвратить или обнаружить это?

Ответы [ 2 ]

2 голосов
/ 29 января 2009

Функция exp называется экспоненциальной функцией, а ее инверсией является натуральный логарифм или логарифм по основанию e. Число е также обычно определяется как основание натурального логарифма

Другими словами, exp (x) и e ^ x - это одна и та же функция. Однако, поскольку е является трансцендентным числом и, следовательно, иррациональным, его значение не может быть дано точно.

Числовое значение е, усеченное до 10 десятичных знаков, составляет 2,71828 1828

Итак, функция exp (x) технически действительна для всех значений x, но практически вы можете их ограничить. Например, если вы ограничите их до +/- 700, вам следует охватить все случаи, охватывающие диапазон

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

Более того зависит от вашего приложения

1 голос
/ 08 июля 2013

Обходной путь, который я использую, состоит в том, чтобы определить диапазон проверки моих аргументов с помощью 'CASE', а затем вернуться к значению по умолчанию, если оно выходит за рамки разумного:

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