Sdílet prostřednictvím


Speciální values s pohyblivou řádovou čárkou

Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Několik speciálních values s plovoucí řádovou čárkou se zpracovává a nerozlišují podle velikosti písmen:

  • Inf, +Inf, nekonečno, +nekonečno: kladné nekonečno
  • -Inf, -Infinity: záporné nekonečno
  • NaN: nejedná se o číslo.

Pozitivní a negativní sémantika nekonečna

Kladné a záporné nekonečno má následující sémantiku:

  • Kladné nekonečno vynásobené libovolnou kladnou hodnotou vrátí kladné nekonečno.
  • Záporné nekonečno vynásobené libovolnou kladnou hodnotou vrátí záporné nekonečno.
  • Kladné nekonečno vynásobené libovolnou zápornou hodnotou vrátí záporné nekonečno.
  • Záporné nekonečno vynásobené libovolnou zápornou hodnotou vrátí kladné nekonečno.
  • Kladné nebo záporné nekonečno vynásobené 0 vrátí NaN.
  • Kladné nebo záporné nekonečno se rovná sobě.
  • V agregacích jsou všechna kladná nekonečna values seskupena dohromady. Všechna záporná nekonečna values jsou seskupena dohromady.
  • Kladné nekonečno a záporné nekonečno se považují za normální values v klíčích join.
  • Kladné nekonečno se řadí nižší než NaN a vyšší než jakákoli jiná values.
  • Záporné nekonečno se řadí níže než jakákoli jiná values.

Sémantika NaN

Při práci s float typy double , které přesně neodpovídají standardní sémantice s plovoucí desetinnou čárkou, má NaN následující sémantiku:

  • NaN = NaN vrátí hodnotu true.
  • V agregacích jsou všechny NaN values seskupené.
  • Hodnota NaN se v klíčích join považuje za normální hodnotu.
  • NaN values je vnímán jako největší hodnota a ve vzestupném pořadí se umisťuje nakonec, jelikož je větší než jakákoli jiná číselná hodnota.

Příklady

> 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