9.3. Математические функции и операторы#
9.3. Математические функции и операторы
Для многих типов Tantor SE предоставляются математические операторы. Для типов без стандартных математических соглашений (например, типы даты/времени) мы описываем фактическое поведение в последующих разделах.
Таблица 9.4 показывает математические операторы, доступные для стандартных числовых типов.
Если не указано иное, операторы, показанные как принимающие numeric_type
, доступны для всех типов smallint
, integer
, bigint
, numeric
, real
и double precision
.
Операторы, показанные как принимающие integral_type
, доступны для типов smallint
, integer
и bigint
.
За исключением указанных случаев, каждая форма оператора возвращает тот же тип данных, что и его аргумент(ы). Вызовы с участием нескольких типов аргументов, такие как integer
+
numeric
, разрешаются с использованием типа, указанного позже в этих списках.
Таблица 9.4. Математические операторы
Оператор Описание Пример(ы) |
---|
Дополнение
|
Унарный плюс (без операции)
|
Вычитание
|
Отрицание
|
Умножение
|
Деление (для целочисленных типов, деление обрезает результат в сторону нуля)
|
Остаток; доступно для
|
Возведение в степень
В отличие от типичной математической практики, по умолчанию несколько использований
|
Квадратный корень
|
Кубический корень
|
Абсолютное значение
|
Побитовое И
|
Побитовое ИЛИ
|
Побитовое исключающее ИЛИ
|
Побитовое НЕ
|
Побитовый сдвиг влево
|
Побитовый сдвиг вправо
|
Таблица 9.5 показывает доступные математические функции.
Многие из этих функций предоставляются в нескольких формах с различными типами аргументов.
За исключением случаев, указанных отдельно, любая данная форма функции возвращает тот же тип данных, что и ее аргумент(ы); случаи смешанных типов разрешаются так же, как и для операторов, описанных выше.
Функции, работающие с данными типа double precision
, в основном реализованы на основе библиотеки C хост-системы; точность и поведение в граничных случаях могут варьироваться в зависимости от хост-системы.
Таблица 9.5. Математические функции
Таблица 9.6 показывает функции для генерации случайных чисел.
Таблица 9.6. Случайные функции
Функция random()
использует детерминированный псевдослучайный генератор чисел.
Она быстрая, но не подходит для криптографических приложений; см. модуль pgcrypto для более безопасной альтернативы.
Если вызывается функция setseed()
, то последовательность результатов последующих вызовов функции random()
в текущей сессии может быть повторена путем повторного вызова setseed()
с тем же аргументом.
Если в текущей сессии не было предварительного вызова функции setseed()
, то первый вызов функции random()
получает начальное значение из зависящего от платформы источника случайных битов.
Таблица 9.7 показывает доступные тригонометрические функции. Каждая из этих функций имеет две варианта: один измеряет углы в радианах, а другой - в градусах.
Таблица 9.7. Тригонометрические функции
Примечание
Еще один способ работы с углами, измеряемыми в градусах, - использовать функции преобразования единиц
и radians()
, показанные ранее. Однако предпочтительнее использовать тригонометрические функции, основанные на градусах, так как это позволяет избежать ошибок округления для особых случаев, таких как degrees()
sind(30)
.
Таблица 9.8 показывает доступные гиперболические функции.
Таблица 9.8. Гиперболические функции