数学函数和操作符 ================= OushuDB 为很多类型提供了数学操作符。对于那些没有常用数学传统的可能排列(比如日期/时间类型),我们在随后的章节里描述了实际的行为。 下表显示了可用的数学操作符。 **表.数学操作符** .. list-table:: :widths: auto :header-rows: 1 * - 操作符 - 描述 - 例子 - 结果 * - \+ - 加 - 2 + 3 - 5 * - \- - 减 - 2 - 3 - -1 * - \* - 乘 - 2 * 3 - 6 * - / - 除(整数除法将截断结果) - 4 / 2 - 2 * - % - 模(求余) - 5 % 4 - 1 * - ^ - 指数运算 - 2.0 ^ 3.0 - 8.0000000000000000 * - \|/ - 平方根 - \|/ 25.0 - 5 * - \||/ - 立方根 - \||/ 27.0 - 3 * - ! - 阶乘 - 5 ! - 120 * - !! - 阶乘(前缀运算符) - !! 5 - 120 * - @ - 绝对值 - @ -5.0 - 5.0 * - & - 按位 AND - 91 & 15 - 11 * - \| - 按位 OR - 32 | 3 - 35 * - # - 按位 XOR - 17 # 5 - 20 * - ~ - 按位 NOT - ~1 - -2 * - << - 按位左移 - 1 << 4 - 16 * - >> - 按位右移 - 8 >> 2 - 2 按位操作符只能用于整数类型,而其他的操作符可用于所有数值类型。按位操作符还可以用于位串类型bit 和bit varying。 下表展示了可用的数学函数。在表中,dp 代表double precision。这些函数中很多有多种形式,区别是参数不同。除非特别声明,任何给定形式的函数返回和它参数同样类型的结果。处理double precision 数据的函数大多数是在宿主系统的C 库的基础上实现的;因此,精度和数值范围方面的行为可能根据宿主系统而变化。 **表.数学函数** .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 返回类型 - 描述 - 例子 - 结果 * - abs (x) - 与x相同 - 绝对值 - abs(-17.4) - 17.4 * - cbrt (dp) - dp - 立方根 - cbrt (27.0) - 3 * - ceil (dp or numeric) - 与输入相同 - 不小于参数的最小整数 - ceil (-42.8) - -42 * - ceiling (dp or numeric) - 与输入相同 - 不小于参数的最小整数(ceil的别名) - ceiling (-95.3) - -95 * - degrees (dp) - dp - 把弧度转成角度 - degrees (0.5) - 28.6478897565412 * - exp (dp or numeric) - 与输入相同 - 指数 - exp (1.0) - 2.7182818284590452 * - floor (dp or numeric) - 与输入相同 - 不大于参数的最大整数 - floor (-42.8) - -43 * - ln (dp or numeric) - 与输入相同 - 自然对数 - ln (2.0) - 0.6931471805599453 * - log (dp or numeric) - 与输入相同 - 以10为底的对数 - log (100.0) - 2.0000000000000000 * - log (b numeric, x numeric) - numeric - 以b为底的对数 - log (2.0, 64.0) - 6.0000000000000000 * - mod (y,x) - 与参数类型相同 - y/x的余数 - mod (9,4) - 1 * - pi () - dp - π 常量 - pi () - 3.14159265358979 * - power (a dp, b dp) - dp - a的b次幂 - power (9.0, 3.0) - 729 * - power (a numeric, b numeric) - numeric - a的b次幂 - power (9.0, 3.0) - 729.0000000000000000 * - radians (dp) - dp - 把角度转化为弧度 - radians (45.0) - 0.785398163397448 * - random () - dp - 0.0到1.0之间的随机数 - random () - \ * - round (dp or numeric) - 与输入相同 - 近似为最接近的整数 - round (42.4) - 42 * - round (v numeric, s int) - 与输入相同 - 近似到小数点后s位 - round (42.4382, 2) - 42.44 * - setseed (dp) - int - 为接下来的random()调用(其值在0-1.0)设置种子 - setseed (0.54823) - 0 * - sign (dp or numeric) - 与输入相同 - 参数的符号(-1, 0, +1) - sign (-8.4) - -1 * - sqrt (dp or numeric) - 与输入相同 - 平方根 - sqrt (2.0) - 1.414213562373095 * - trunc (dp or numeric) - 与输入相同 - 截断向0接近 - trunc (42.8) - 42 * - trunc (v numeric, s int) - 与输入相同 - 截断到小数点后s位 - trunc (42.4382, 2) - 42.43 * - width_bucket (op numeric, b1 numeric, b2 numeric, count int) - int - 返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱状图中operand将会被赋予的那个桶 - width_bucket (5.35, 0.024, 10.06, 5) - 3 最后,下表展示了可用的三角函数,所有的三角函数的参数和返回值类型都是double precision。 **表.三角函数** 这里x,y取值应该在-1和1之间,否则会报错。 .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 描述 * - acos (x) - 反余弦 * - asin (x) - 反正弦 * - atan (x) - 反正切 * - atan2 (x,y) - x/y的反正切 * - cos (x) - 余弦 * - cot (x) - 余切 * - sin (x) - 正弦 * - tan (x) - 正切