Specjalne wartości zmiennoprzecinkowe

Dotyczy:zaznacz pole wyboru oznaczone jako yes Databricks SQL check oznaczone tak Databricks Runtime

Kilka specjalnych wartości zmiennoprzecinkowych jest traktowanych w sposób bez uwzględniania wielkości liter:

  • Inf, +Inf, Nieskończoność, +Nieskończoność: nieskończoność dodatnia
  • -Inf, -Infinity: ujemna nieskończoność
  • NaN: nie liczba

Semantyka dodatnia i ujemna nieskończoności

Nieskończoność dodatnia i ujemna ma następujące semantyki:

  • Nieskończoność dodatnia mnożona przez dowolną wartość dodatnią zwraca nieskończoność dodatnią.
  • Ujemna nieskończoność mnożona przez dowolną wartość dodatnią zwraca nieskończoność ujemną.
  • Nieskończoność dodatnia mnożona przez dowolną wartość ujemną zwraca nieskończoność ujemną.
  • Ujemna nieskończoność mnożona przez dowolną wartość ujemną zwraca nieskończoność dodatnią.
  • Dodatnia lub ujemna nieskończoność pomnożona przez 0 zwraca wartość NaN.
  • Dodatnia lub ujemna nieskończoność jest równa samej sobie.
  • W agregacjach wszystkie dodatnie wartości nieskończoności są grupowane razem. Podobnie wszystkie ujemne wartości nieskończoności są zgrupowane razem.
  • Nieskończoność dodatnia i nieskończoność ujemna są traktowane jako wartości normalne w kluczach sprzężenia.
  • Nieskończoność dodatnia sortuje mniej niż wartość NaN i wyższa niż jakakolwiek inna wartość.
  • Ujemna nieskończoność sortuje mniej niż jakiekolwiek inne wartości.

Semantyka sieci NaN

W przypadku radzenia sobie z typami float lub double , które nie pasują dokładnie do standardowych semantyki zmiennoprzecinkowych, naN ma następujące semantyki:

  • NaN = NaN zwraca wartość true.
  • W agregacjach wszystkie wartości NaN są grupowane razem.
  • NaN jest traktowana jako wartość normalna w kluczach sprzężenia.
  • Wartości naN są ostatnio w kolejności rosnącej, większe niż jakakolwiek inna wartość liczbowa.

Przykłady

> 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