9.3. Математические функции и операторы
Математические операторы определены для множества типов PostgreSQL. Как работают эти операции с типами, для которых нет стандартных соглашений о математических действиях (например, с типами даты/времени), мы опишем в последующих разделах.
В Таблице 9.4 перечислены все доступные математические операторы.
Таблица 9.4. Математические операторы
| Оператор | Описание | Пример | Результат |
|---|---|---|---|
+ | сложение | 2 + 3 | 5 |
- | вычитание | 2 - 3 | -1 |
* | умножение | 2 * 3 | 6 |
/ | деление (при целочисленном делении остаток отбрасывается) | 4 / 2 | 2 |
% | остаток от деления | 5 % 4 | 1 |
^ | возведение в степень (вычисляется слева направо) | 2.0 ^ 3.0 | 8 |
|/ | квадратный корень | |/ 25.0 | 5 |
||/ | кубический корень | ||/ 27.0 | 3 |
! | факториал (устаревший оператор, его заменяет функция factorial()) | 5 ! | 120 |
!! | факториал в префиксной форме (устаревший оператор, его заменяет функция factorial()) | !! 5 | 120 |
@ | модуль числа (абсолютное значение) | @ -5.0 | 5 |
& | битовый AND | 91 & 15 | 11 |
| | битовый OR | 32 | 3 | 35 |
# | битовый XOR | 17 # 5 | 20 |
~ | битовый NOT | ~1 | -2 |
<< | битовый сдвиг влево | 1 << 4 | 16 |
>> | битовый сдвиг вправо | 8 >> 2 | 2 |
Битовые операторы работают только с целочисленными типами данных и с битовыми строками bit и bit varying, как показано в Таблице 9.13.
В Таблице 9.5 перечислены все существующие математические функции. Сокращение dp в ней обозначает тип double precision (плавающее с двойной точностью). Многие из этих функций имеют несколько форм с разными типами аргументов. За исключением случаев, где это указано явно, любая форма функции возвращает результат того же типа, что и аргумент. Функции, работающие с данными double precision, в массе своей используют реализации из системных библиотек сервера, поэтому точность и поведение в граничных случаях может зависеть от системы сервера.
Таблица 9.5. Математические функции
В Таблице 9.6 перечислены все функции для генерации случайных чисел.
Таблица 9.6. Случайные функции
Характеристики значений, возвращаемых функцией зависят от системы. Для применения в криптографии они непригодны; альтернативы описаны в pgcrypto.random()
Наконец, в Таблице 9.7 перечислены все имеющиеся тригонометрические функции. Все эти функции принимают аргументы и возвращают значения типа double precision. У каждой функции имеются две вариации: одна измеряет углы в радианах, а вторая — в градусах.
Таблица 9.7. Тригонометрические функции
Примечание
Также можно работать с углами в градусах, применяя вышеупомянутые функции преобразования единиц и radians(). Однако предпочтительнее использовать тригонометрические функции с градусами, так как это позволяет избежать ошибок округления в особых случаях, например, при вычислении degrees()sind(30).
9.3. Mathematical Functions and Operators
Mathematical operators are provided for many PostgreSQL types. For types without standard mathematical conventions (e.g., date/time types) we describe the actual behavior in subsequent sections.
Table 9.4 shows the available mathematical operators.
Table 9.4. Mathematical Operators
| Operator | Description | Example | Result |
|---|---|---|---|
+ | addition | 2 + 3 | 5 |
- | subtraction | 2 - 3 | -1 |
* | multiplication | 2 * 3 | 6 |
/ | division (integer division truncates the result) | 4 / 2 | 2 |
% | modulo (remainder) | 5 % 4 | 1 |
^ | exponentiation (associates left to right) | 2.0 ^ 3.0 | 8 |
|/ | square root | |/ 25.0 | 5 |
||/ | cube root | ||/ 27.0 | 3 |
! | factorial (deprecated, use factorial() instead) | 5 ! | 120 |
!! | factorial as a prefix operator (deprecated, use factorial() instead) | !! 5 | 120 |
@ | absolute value | @ -5.0 | 5 |
& | bitwise AND | 91 & 15 | 11 |
| | bitwise OR | 32 | 3 | 35 |
# | bitwise XOR | 17 # 5 | 20 |
~ | bitwise NOT | ~1 | -2 |
<< | bitwise shift left | 1 << 4 | 16 |
>> | bitwise shift right | 8 >> 2 | 2 |
The bitwise operators work only on integral data types and are also available for the bit string types bit and bit varying, as shown in Table 9.13.
Table 9.5 shows the available mathematical functions. In the table, dp indicates double precision. Many of these functions are provided in multiple forms with different argument types. Except where noted, any given form of a function returns the same data type as its argument. The functions working with double precision data are mostly implemented on top of the host system's C library; accuracy and behavior in boundary cases can therefore vary depending on the host system.
Table 9.5. Mathematical Functions
Table 9.6 shows functions for generating random numbers.
Table 9.6. Random Functions
The characteristics of the values returned by depend on the system implementation. It is not suitable for cryptographic applications; see pgcrypto module for an alternative. random()
Finally, Table 9.7 shows the available trigonometric functions. All trigonometric functions take arguments and return values of type double precision. Each of the trigonometric functions comes in two variants, one that measures angles in radians and one that measures angles in degrees.
Table 9.7. Trigonometric Functions
Note
Another way to work with angles measured in degrees is to use the unit transformation functions and radians() shown earlier. However, using the degree-based trigonometric functions is preferred, as that way avoids round-off error for special cases such as degrees()sind(30).