特殊な浮動小数点値

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

いくつかの特殊な浮動小数点値は、大文字と小文字を区別しない方法で扱われます。

  • Inf、+Inf、Infinity、+Infinity: 正の無限大
  • -Inf、-Infinity: 負の無限大
  • NaN: 非数

正および負の無限大のセマンティクス

正と負の無限大には次のセマンティクスがあります。

  • 正の無限大に任意の正の値を乗算すると、正の無限大が返されます。
  • 負の無限大に任意の正の値を乗算すると、負の無限大が返されます。
  • 正の無限大に任意の負の値を乗算すると、負の無限大が返されます。
  • 負の無限大に任意の負の値を乗算すると、正の無限大が返されます。
  • 正または負の無限大に 0 を乗算すると、NaN が返されます。
  • 正または負の無限大はそれ自体と等しくなります。
  • 集計では、正の無限大の値がすべてグループ化されます。 同様に、負の無限大の値がすべてグループ化されます。
  • 正の無限大と負の無限大は、結合キーで通常の値として扱われます。
  • 正の無限大は、NaN より低く、他のすべての値よりも高く並べ替えられます。
  • 負の無限大は、他のどの値よりも低く並べ替えられます。

NaN のセマンティクス

標準の浮動小数点セマンティクスと完全には一致しない float または double 型を処理する場合、NaN には次のセマンティクスがあります。

  • NaN = NaN は true を返します。
  • 集計では、NaN 値がすべてグループ化されます。
  • NaN は、結合キーで通常の値として扱われます。
  • 昇順の場合、NaN 値は、他のどの数値よりも大きく、最後に配置されます。

> 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