Funciones matemáticas

Todas las funciones matemáticas tienen los siguientes comportamientos:

  • Muestran NULL si alguno de los parámetros de entrada es NULL.
  • Muestran NaN si alguno de los argumentos es NaN.

ABS

ABS(X)

Descripción

Calcula el valor absoluto. Muestra un error si el argumento es un número entero y el valor de resultado no se puede representar como el mismo tipo; esto sucede solo para el valor de entrada negativo más grande, que no tiene una representación positiva. Muestra +inf para un argumento +/-inf. Muestra NUMERIC para un argumento NUMERIC.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
SALIDAINT64NUMERICFLOAT64

SIGN

SIGN(X)

Descripción

Muestra -1, 0 o +1 para los argumentos negativos, de cero y positivos, respectivamente. Para argumentos de punto flotante, esta función no distingue entre cero positivo y negativo. Para los argumentos NUMERIC, esta función muestra -1, 0 o +1 como NUMERIC. Muestra NaN para un argumento NaN.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
SALIDAINT64NUMERICFLOAT64

IS_INF

IS_INF(X)

Descripción

Muestra TRUE si el valor es infinito positivo o negativo.

Muestra FALSE para las entradas NUMERIC, ya que NUMERIC no puede ser INF.

Muestra NULL para las entradas NULL.

IS_NAN

IS_NAN(X)

Descripción

Muestra TRUE si el valor es NaN.

Muestra FALSE para las entradas NUMERIC, ya que NUMERIC no puede ser NAN.

Muestra NULL para las entradas NULL.

IEEE_DIVIDE

IEEE_DIVIDE(X, Y)

Descripción

Divide X por Y; esta función nunca presenta errores. Muestra FLOAT64. A diferencia del operador de división (/), esta función no genera errores de divisiones por cero ni se desborda.

Casos especiales:

  • Si el resultado se desborda, muestra +/-inf.
  • Si Y=0 y X=0, muestra NaN.
  • Si Y=0 y X!=0, muestra +/-inf.
  • Si X = +/-inf y Y = +/-inf, muestra NaN.

El comportamiento de IEEE_DIVIDE se muestra con más detalle en la tabla a continuación.

Casos especiales de IEEE_DIVIDE

En la siguiente tabla, se enumeran los casos especiales de IEEE_DIVIDE.

Tipo de datos del numerador (X) Tipo de datos del denominador (Y) Valor del resultado
Todo excepto 0 0 +/-inf
0 0 NaN
0 NaN NaN
NaN 0 NaN
+/-inf +/-inf NaN

SQRT

SQRT(X)

Descripción

Calcula la raíz cuadrada de X. Genera un error si X es menor que 0.

Muestra +inf si X es +inf.

Tipo de datos mostrados

NUMERIC no se admite directamente como entrada. Primero, debes convertir NUMERIC en FLOAT64 de manera explícita. El resultado será FLOAT64.

POW

POW(X, Y)

Descripción

Muestra el valor de X elevado a la potencia de Y. Si el resultado se subdesborda y no es representable, entonces la función muestra un valor de cero. Muestra un error si uno de los siguientes es verdadero:

  • X es un valor finito menor que 0 y, además, Y es un número no entero.
  • X es 0 y, también, Y es un valor finito menor que 0.

Tipo de datos mostrados El tipo de datos que se muestra se determina mediante los tipos de argumentos con la siguiente tabla.

ENTRADAINT64NUMERICFLOAT64
INT64FLOAT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

Casos especiales de POW(X, Y)

Los siguientes son casos especiales de POW(X, Y).

X Y POW(X, Y) o POWER(X, Y)
1.0 Cualquier valor, incluido NaN 1.0
Cualquiera, incluido NaN 0 1.0
-1.0 +/-inf 1.0
ABS(X) < 1 -inf +inf
ABS(X) > 1 -inf 0
ABS(X) < 1 +inf 0
ABS(X) > 1 +inf +inf
-inf Y < 0 0
-inf Y > 0 -inf si Y es un número entero impar, +inf si es lo contrario
+inf Y < 0 0
+inf Y > 0 +inf

POWER

POWER(X, Y)

Descripción

Sinónimo de POW(X, Y).

EXP

EXP(X)

Descripción

Calcula e elevado a X, también llamada función exponencial natural. Si el resultado se subdesborda, esta función muestra un cero. Genera un error si el resultado se desborda. Si X es +/-inf, entonces esta función muestra +inf o 0.

Tipo de datos mostrados

NUMERIC no se admite directamente como entrada. Primero debes convertir la entrada NUMERIC en FLOAT64 de forma explícita. El resultado será FLOAT64.

LN

LN(X)

Descripción

Calcula el logaritmo natural de X. Genera un error si X es menor o igual que cero. Si X es +inf, entonces esta función muestra +inf.

Tipo de datos mostrados

NUMERIC no se admite directamente como entrada. Primero debes convertir la entrada NUMERIC en FLOAT64 de forma explícita. El resultado será FLOAT64.

LOG

LOG(X [, Y])

Descripción

Si solo X está presente, LOG es un sinónimo de LN. Si Y también está presente, LOG calcula el logaritmo de X en base Y. Genera un error en los siguientes casos:

  • X es menor o igual que cero.
  • Y es 1.0.
  • Y es menor o igual que cero.

Tipo de datos mostrados

NUMERIC no se admite directamente como entrada. Primero debes convertir la entrada NUMERIC en FLOAT64 de forma explícita. El resultado será FLOAT64.

El comportamiento de LOG(X, Y) se muestra con más detalle en la tabla a continuación.

Casos especiales de LOG(X, Y)

X Y LOG(X, Y)
-inf Cualquier valor NaN
Cualquier valor +inf NaN
+inf 0.0 Y < 1.0 -inf
+inf Y > 1.0 +inf

LOG10

LOG10(X)

Descripción

Similar a LOG, pero calcula el logaritmo en base 10.

Tipo de datos mostrados

NUMERIC no se admite directamente como entrada. Primero debes convertir la entrada NUMERIC en FLOAT64 de forma explícita. El resultado será FLOAT64.

GREATEST

GREATEST(X1,...,XN)

Descripción

Muestra NULL si alguna de las entradas es NULL. De lo contrario, muestra NaN si alguna de las entradas es NaN. Si no, muestra el valor más grande entre X1,…,XN según la comparación <.

Tipos de datos mostrados

Tipo de datos de los valores de entrada.

LEAST

LEAST(X1,...,XN)

Descripción

Muestra NULL si alguna de las entradas es NULL. Muestra NaN si alguna de las entradas es NaN. Si no, muestra el valor más pequeño entre X1,…,XN según la > comparación.

Tipos de datos mostrados

Tipo de datos de los valores de entrada.

DIV

DIV(X, Y)

Descripción

Muestra el resultado de la división del número entero de X por Y. La división por cero muestra un error. La división por -1 se puede desbordar. Si ambas entradas son NUMERIC y el resultado es desbordamiento, muestra un error numeric overflow.

Tipo de datos mostrados

El tipo de datos que se muestra se determina según los tipos de argumentos que incluyen la tabla siguiente.

ENTRADAINT64NUMERIC
INT64INT64NUMERIC
NUMERICNUMERICNUMERIC

SAFE_DIVIDE

SAFE_DIVIDE(X, Y)

Descripción

Equivale al operador de división (X / Y), pero muestra NULL si se produce un error, como un error de división por cero.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
INT64FLOAT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_MULTIPLY

SAFE_MULTIPLY(X, Y)

Descripción

Equivalente al operador de multiplicación (*), pero muestra NULL si se produce un desbordamiento.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
INT64INT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_NEGATE

SAFE_NEGATE(X)

Descripción

Equivalente al operador menos unario (-), pero muestra NULL si se produce un desbordamiento.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
SALIDAINT64NUMERICFLOAT64

SAFE_ADD

SAFE_ADD(X, Y)

Descripción

Equivale al operador de suma (+), pero muestra NULL si se produce un desbordamiento.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
INT64INT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_SUBTRACT

SAFE_SUBTRACT(X, Y)

Descripción

Muestra el resultado de Y que se restó a X. Equivalente al operador de resta (-), pero muestra NULL si se produce un desbordamiento.

Tipo de datos mostrados

ENTRADAINT64NUMERICFLOAT64
INT64INT64NUMERICFLOAT64
NUMERICNUMERICNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64

MOD

MOD(X, Y)

Descripción

Función de módulo: muestra el resto de la división de X por Y. El valor que se muestra tiene el mismo signo que X. Se generará un error si Y es 0.

Tipo de datos mostrados

El tipo de datos que se muestra se determina según los tipos de argumentos que incluyen la tabla siguiente.

ENTRADAINT64NUMERIC
INT64INT64NUMERIC
NUMERICNUMERICNUMERIC

ROUND

ROUND(X [, N])

Descripción

Si solo está presente X, ROUND redondea X al número entero más cercano. Si N está presente, ROUND redondea X a N decimales después del punto decimal. Si N es negativo, ROUND redondeará los dígitos a la izquierda del punto decimal. Se redondean casos de punto medio en dirección opuesta al cero. Genera un error si se produce un desbordamiento.

Si X es NUMERIC, el resultado es NUMERIC.

TRUNC

TRUNC(X [, N])

Descripción

Si solo está presente X, TRUNC redondea X al número entero más cercano cuyo valor absoluto no es mayor que el valor absoluto de X. Si N también está presente, TRUNC se comporta como ROUND(X, N), pero siempre se redondea hacia cero y nunca se desborda.

Si X es NUMERIC, el resultado es NUMERIC.

CEIL

CEIL(X)

Descripción

Muestra el valor integral más pequeño (con el tipo FLOAT64) que no es menor que X.

Si X es NUMERIC, el resultado es NUMERIC.

CEILING

CEILING(X)

Descripción

Sinónimo de CEIL(X)

FLOOR

FLOOR(X)

Descripción

Muestra el valor integral más grande (con el tipo FLOAT64) que no es mayor que X.

Si X es NUMERIC, el resultado es NUMERIC.

Ejemplo del comportamiento de la función de redondeo

Comportamiento de ejemplo de las funciones de redondeo de SQL de Cloud Spanner:

Entrada “X” ROUND(X) TRUNC(X) CEIL(X) FLOOR(X)
2.0 2.0 2.0 2.0 2.0
2.3 2.0 2.0 3.0 2.0
2.8 3.0 2.0 3.0 2.0
2.5 3.0 2.0 3.0 2.0
-2.3 -2.0 -2.0 -2.0 -3.0
-2.8 -3.0 -2.0 -2.0 -3.0
-2.5 -3.0 -2.0 -2.0 -3.0
0 0 0 0 0
+/-inf +/-inf +/-inf +/-inf +/-inf
NaN NaN NaN NaN NaN

COS

COS(X)

Descripción

Calcula el coseno de X, en el que X se especifica en radianes. Nunca falla.

COSH

COSH(X)

Descripción

Calcula el coseno hiperbólico de X, en el que X se especifica en radianes. Genera un error si se produce un desbordamiento.

Si X es NUMERIC, el resultado es FLOAT64.

ACOS

ACOS(X)

Descripción

Calcula el valor principal del coseno inverso de X. El valor de muestra está en el rango [0,π]. Genera un error si X es un valor fuera del rango [-1, 1].

Si X es NUMERIC, el resultado es FLOAT64.

ACOSH

ACOSH(X)

Descripción

Calcula el coseno hiperbólico inverso de X. Genera un error si X es un valor inferior a 1.

Si X es NUMERIC, el resultado es FLOAT64.

SIN

SIN(X)

Descripción

Calcula el seno de X, en el que X se especifica en radianes. Nunca falla.

SINH

SINH(X)

Descripción

Calcula el seno hiperbólico de X, en el que X se especifica en radianes. Genera un error si se produce un desbordamiento.

Si X es NUMERIC, el resultado es FLOAT64.

ASIN

ASIN(X)

Descripción

Calcula el valor principal del seno inverso de X. El valor que se muestra está en el rango [-π/2,π/2]. Genera un error si X está fuera del rango [-1, 1].

Si X es NUMERIC, el resultado es FLOAT64.

ASINH

ASINH(X)

Descripción

Calcula el seno hiperbólico inverso de X. No falla.

Si X es NUMERIC, el resultado es FLOAT64.

TAN

TAN(X)

Descripción

Calcula la tangente de X, en la que X se especifica en radianes. Genera un error si se produce un desbordamiento.

TANH

TANH(X)

Descripción

Calcula la tangente hiperbólica de X, en la que X se especifica en radianes. No falla.

Si X es NUMERIC, el resultado es FLOAT64.

ATAN

ATAN(X)

Descripción

Calcula el valor principal de la tangente inversa de X. El valor que se muestra está en el rango [-π/2,π/2]. No falla.

Si X es NUMERIC, el resultado es FLOAT64.

ATANH

ATANH(X)

Descripción

Calcula la tangente hiperbólica inversa de X. Genera un error si X está fuera del rango [-1, 1].

Si X es NUMERIC, el resultado es FLOAT64.

ATAN2

ATAN2(Y, X)

Descripción

Calcula el valor principal de la tangente inversa de Y/X con los signos de los dos argumentos para determinar el cuadrante. El valor que se muestra está en el rango [-π,π].

Si X es NUMERIC, el resultado es FLOAT64.

El comportamiento de esta función se ilustra con más detalle en la siguiente tabla.

Casos especiales de ATAN2()

Y X ATAN2(Y, X)
NaN Cualquier valor NaN
Cualquier valor NaN NaN
0 0 0, π o -π según el signo de X y de Y
Valor finito -inf π o -π según el signo de Y
Valor finito +inf 0
+/-inf Valor finito π/2 o π/2 según el signo de Y
+/-inf -inf ¾π o -¾π según el signo de Y
+/-inf +inf π/4 o -π/4 según el signo de Y

Casos especiales de funciones de redondeo hiperbólicas y trigonométricas

X COS(X) COSH(X) ACOS(X) ACOSH(X) SIN(X) SINH(X) ASIN(X) ASINH(X) TAN(X) TANH(X) ATAN(X) ATANH(X)
+/-inf NaN =+inf NaN =+inf NaN =+inf NaN =+inf NaN =+1.0 π/2 NaN
-inf NaN =+inf NaN NaN NaN -inf NaN -inf NaN -1.0 -π/2 NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN