EXP: примеры (SQL)
EXP(float_expression): floatОписание функции EXP в MS SQL
Функция EXP в Microsoft SQL Server предназначена для вычисления экспоненты числа, то есть значения экспоненциальной функции ex, где e — основание натурального логарифма (приблизительно 2.71828182845905), а x — заданное числовое выражение.
Функция применяется в математических и статистических расчетах, финансовом моделировании, анализе временных рядов, а также при работе с непрерывным ростом или затуханием процессов.
Синтаксис:
EXP ( numeric_expression )
Аргументы:
numeric_expression — выражение типа numeric или приближенного числового типа данных (float, real).
Возвращаемое значение:
Тип данных, аналогичный типу аргумента. Функция возвращает e, возведенное в степень, указанную в numeric_expression. Для аргумента NULL результатом будет NULL.
Базовые примеры использования
Пример вычисления экспоненты для целого числа:
SELECT EXP(1) AS ExpResult;ExpResult 2.71828182845905
Пример с десятичным числом:
SELECT EXP(2.5) AS ExpResult;ExpResult 12.1824939607035
Использование с нулем и отрицательным значением:
SELECT
EXP(0) AS ExpZero,
EXP(-1) AS ExpNegative;ExpZero ExpNegative 1 0.367879441171442
Применение к столбцу таблицы:
CREATE TABLE #Sample (Value FLOAT);
INSERT INTO #Sample VALUES (0), (1), (2);
SELECT Value, EXP(Value) AS Exponentiation FROM #Sample;
DROP TABLE #Sample;Value Exponentiation 0 1 1 2.71828182845905 2 7.38905609893065
Похожие функции в MS SQL
LOG и LOG10 — функции, обратные EXP. LOG вычисляет натуральный логарифм, LOG10 — десятичный. Используются, когда требуется найти показатель степени.
POWER — функция возведения в произвольную степень. Применяется вместо EXP, когда основание степени отличается от e.
SQRT — вычисляет квадратный корень числа. Может быть альтернативой для EXP(0.5 * LOG(value)).
Выбор функции зависит от задачи: EXP используется для экспоненциального роста с основанием e, POWER — для произвольного основания.
Типичные ошибки
Передача нечислового аргумента приводит к ошибке преобразования типов.
SELECT EXP('text');Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to float.
Переполнение при очень большом аргументе.
SELECT EXP(1000.0);Msg 232, Level 16, State 2, Line 1 Arithmetic overflow error for type float, value = INF.
Потеря точности при работе с типами real и float из-за ограничений представления чисел с плавающей точкой.
DECLARE @r REAL = 20.0;
SELECT EXP(@r) AS ExpReal, EXP(CAST(@r AS FLOAT)) AS ExpFloat;ExpReal ExpFloat 485165184.000000 485165195.409790
Изменения в последних версиях
В актуальных версиях Microsoft SQL Server (2012 и новее) функция EXP не претерпела значительных изменений в синтаксисе или основном поведении. Все обновления связаны с общими улучшениями обработки чисел с плавающей точкой и интеграцией со средой выполнения .NET CLR.
В SQL Server 2019 и 2022 были оптимизированы вычисления математических функций в контексте использования с технологиями In-Memory OLTP и улучшена параллельная обработка сложных запросов, включающих EXP.
Расширенные примеры применения
Моделирование непрерывного роста с заданной процентной ставкой (5% годовых) за 3 года:
DECLARE @rate FLOAT = 0.05, @time FLOAT = 3.0;
SELECT EXP(@rate * @time) AS GrowthFactor;GrowthFactor 1.16183424272828
Вычисление нормального (Гауссова) распределения для x=0, mean=0, sigma=1:
DECLARE @x FLOAT = 0, @mean FLOAT = 0, @sigma FLOAT = 1;
SELECT (1 / (@sigma * SQRT(2 * PI()))) *
EXP(-0.5 * POWER((@x - @mean)/@sigma, 2)) AS NormalDist;NormalDist 0.398942280401433
Использование в табличных вычислениях для преобразования логарифмических данных:
WITH LogData AS (
SELECT 1 AS id, 0.0 AS log_val UNION ALL
SELECT 2, 1.09861228866811 UNION ALL
SELECT 3, 2.30258509299405
)
SELECT id, log_val, EXP(log_val) AS original_value
FROM LogData;id log_val original_value 1 0 1 2 1.09861228866811 3 3 2.30258509299405 10
Создание последовательности экспоненциально растущих значений с использованием рекурсивного CTE:
WITH ExpoSeries AS (
SELECT 0 AS n, EXP(0) AS val
UNION ALL
SELECT n + 1, EXP((n+1)*0.5)
FROM ExpoSeries
WHERE n < 5
)
SELECT n, val FROM ExpoSeries;n val 0 1 1 1.64872127070013 2 2.71828182845905 3 4.48168907033806 4 7.38905609893065 5 12.1824939607035
Решение уравнения с использованием EXP и LOG для нахождения времени удвоения при непрерывном росте:
DECLARE @rate FLOAT = 0.07;
SELECT LOG(2) / @rate AS DoublingTimeYears;DoublingTimeYears 9.90210257996454
Аналоги в других СУБД и языках
MySQL: Функция EXP имеет идентичный синтаксис и поведение.
SELECT EXP(1); -- 2.718281828459045Oracle: Также поддерживает функцию EXP в составе SQL и PL/SQL.
SELECT EXP(1) FROM dual; -- 2.718281828459045PostgreSQL: Функция EXP работает аналогично, возвращает тип double precision.
SELECT EXP(1.0); -- 2.718281828459045SQLite: Математическая функция EXP доступна при подключенном модуле math.
SELECT EXP(1); -- 2.71828182845905Python (math): Функция math.exp() вычисляет экспоненту для float.
import math
math.exp(1) # 2.718281828459045JavaScript (Math): Метод Math.exp() возвращает ex.
Math.exp(1); // 2.718281828459045