Valores especiais de ponto flutuante
Aplica-se a: Databricks SQL Databricks Runtime
Vários valores especiais de ponto flutuante são tratados de forma insensível a maiúsculas e minúsculas:
- Inf, +Inf, Infinito, +Infinito: infinito positivo
- -Inf, -Infinito: infinito negativo
- NaN: não é um número
Semântica do infinito positiva e negativa
O infinito positivo e o infinito negativo têm a seguinte semântica:
- O infinito positivo multiplicado por qualquer valor positivo retorna o infinito positivo.
- O infinito negativo multiplicado por qualquer valor positivo retorna infinito negativo.
- O infinito positivo multiplicado por qualquer valor negativo retorna o infinito negativo.
- O infinito negativo multiplicado por qualquer valor negativo retorna o infinito positivo.
- O infinito positivo ou negativo multiplicado por 0 retorna NaN.
- O infinito positivo ou negativo é igual a si mesmo.
- Nas agregações, todos os valores infinitos positivos são agrupados. Da mesma forma, todos os valores infinitos negativos são agrupados.
- O infinito positivo e o infinito negativo são tratados como valores normais nas chaves de junção.
- O infinito positivo classifica mais baixo do que NaN e mais alto do que qualquer outro valor.
- O infinito negativo classifica mais baixo do que quaisquer outros valores.
Semântica NaN
Ao lidar com float
ou double
tipos que não correspondem exatamente à semântica de ponto flutuante padrão, NaN tem a seguinte semântica:
- NaN = NaN retorna true.
- Nas agregações, todos os valores NaN são agrupados.
- NaN é tratado como um valor normal em chaves de junção.
- Os valores NaN ficam em último lugar quando em ordem crescente, maiores do que qualquer outro valor numérico.
Exemplos
> SELECT double('infinity');
Infinity
> SELECT float('-inf');
-Infinity
> SELECT float('NaN');
NaN
> SELECT double('infinity') * 0;
NaN
> SELECT double('-infinity') * (-1234567);
Infinity
> SELECT double('infinity') < double('NaN');
true
> SELECT double('NaN') = double('NaN');
true
> SELECT double('inf') = double('infinity');
true
> SELECT COUNT(*), c2
FROM VALUES (1, double('infinity')),
(2, double('infinity')),
(3, double('inf')),
(4, double('-inf')),
(5, double('NaN')),
(6, double('NaN')),
(7, double('-infinity'))
AS test(c1, c2)
GROUP BY c2;
2 NaN
2 -Infinity
3 Infinity
Relacionada
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários