Aracılığıyla paylaş


Özel kayan nokta değerleri

Şunlar için geçerlidir: onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Birkaç özel kayan nokta değeri büyük/küçük harfe duyarsız bir şekilde ele alınıyor:

  • Inf, +Inf, Infinity, +Infinity: pozitif sonsuzluk
  • -Inf, -Infinity: negatif sonsuzluk
  • NaN: sayı değil

Pozitif ve negatif sonsuz semantiği

Pozitif ve negatif sonsuzluk aşağıdaki semantiklere sahiptir:

  • Herhangi bir pozitif değerle çarpılan pozitif sonsuzluk, pozitif sonsuzluk döndürür.
  • Herhangi bir pozitif değerle çarpılan negatif sonsuzluk, negatif sonsuzluk döndürür.
  • Herhangi bir negatif değerle çarpılan pozitif sonsuzluk, negatif sonsuzluk döndürür.
  • Negatif sonsuzluk herhangi bir negatif değerle çarpılırsa pozitif sonsuzluk döndürür.
  • Pozitif veya negatif sonsuzluk 0 ile çarpılırsa NaN döndürür.
  • Pozitif veya negatif sonsuzluk kendisine eşittir.
  • Toplamalarda, tüm pozitif sonsuzluk değerleri birlikte gruplandırılır. Benzer şekilde, tüm negatif sonsuzluk değerleri birlikte gruplandırılır.
  • Pozitif sonsuzluk ve negatif sonsuz, birleştirme anahtarlarında normal değerler olarak değerlendirilir.
  • Pozitif sonsuzluk, NaN'den daha düşük ve diğer değerlerden daha yüksek sıralar.
  • Negatif sonsuzluk, diğer değerlerden daha düşük sıralar.

NaN semantiği

Standart kayan nokta semantiğiyle tam olarak eşleşmeyen veya double türleriyle float ilgilenirken NaN aşağıdaki semantiği içerir:

  • NaN = NaN true döndürür.
  • Toplamalarda, tüm NaN değerleri birlikte gruplandırılır.
  • NaN, birleştirme anahtarlarında normal bir değer olarak değerlendirilir.
  • NaN değerleri artan düzende olduğunda, diğer sayısal değerlerden daha büyük olduğunda en sondadır.

Örnekler

> 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