INFおよびNAN
TimesTenでは、IEEE浮動小数点値Inf(正の無限大)、-Inf(負の無限大)およびNaN(非数)がサポートされています。
定数値
定数値は、浮動小数点定数が許可されている場合に使用できます。次の定数がサポートされています。
-
BINARY_FLOAT_INFINITY -
-BINARY_FLOAT_INFINITY -
BINARY_DOUBLE_INFINITY -
-BINARY_DOUBLE_INFINITY -
BINARY_FLOAT_NAN -
BINARY_DOUBLE_NAN
次の例では、BINARY_FLOAT型の列およびTT_INTEGER型の列を含む表を作成します。BINARY_FLOAT_INFINITYおよびBINARY_FLOAT_NANは、BINARY_FLOAT型の列に挿入されます。
Command> CREATE TABLE bfdemo (id BINARY_FLOAT, Ii2 TT_INTEGER); Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_INFINITY, 50); 1 row inserted. Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_NAN, 100); 1 row inserted. Command> SELECT * FROM bfdemo; < INF, 50 > < NAN, 100 > 2 rows found.
主キーの値
Inf、-InfおよびNaNは、主キーで定義された列で使用できる値です。これは、主キーで定義された列では使用できないNULLとは異なります。
BINARY_FLOAT列およびBINARY_DOUBLE列には、Inf、-InfおよびNaNの値のみ挿入できます。
InfおよびNaN (浮動小数点の条件)の選択
浮動小数点の条件によって、式が無限大であるか、演算での未定義の結果(NaN(非数))であるかが判別されます。
次の構文を考えてみます。
Expression IS [NOT] {NAN|INFINITE}
Expressionは、数値データ型、または暗黙的に数値データ型に変換可能なデータ型に解決される必要があります。
次の表に、浮動小数点の条件を示します。
| 条件 | 操作 | 例 |
|---|---|---|
|
|
|
SELECT * FROM bfdemo WHERE id IS NOT NAN; ID, ID2 < INF, 50 > 1 row found. |
|
|
|
SELECT * FROM bfdemo WHERE id IS NOT INFINITE; ID, ID2 < NAN, 100 > 1 row found. |
ノート:
定数キーワードは、特定のBINARY_FLOAT値およびBINARY_DOUBLE値を表します。比較キーワードは、値のプロパティに対応しており、いずれの型に対しても固有ではありません(ただし、BINARY_FLOAT型、BINARY_DOUBLE型、またはBINARY_FLOATやBINARY_DOUBLEに変換可能な型に対しては、TRUEとしてのみ評価されます)。
InfとNaNの比較には、次のルールが適用されます。
-
Inf(または-Inf)と有限値の間での比較は、想定したとおりの結果になります。たとえば、5 >-Infなどです。 -
(Inf = Inf)および(Inf > -Inf)は両方ともTRUEと評価されます。 -
(NaN = NaN)はTRUEと評価されます。
照合順序に関しては次のように適用されます。
-
-Infは、他のすべての値より低い優先順位でソートされます。 -
Infは、NaNおよびNULLより低い優先順位でソートされ、他のすべての値よりは高い優先順位でソートされます。 -
NaNは、Infより高い優先順位でソートされます。 -
NULLは、NaNより高い優先順位でソートされます。NULLは、すべての照合順序で常に最大の値となります。
InfおよびNaNを含む式
-
浮動小数点値を含む式では、
Inf、-InfまたはNaNが生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf、-InfまたはNaNの場合に生成される可能性があります。InfおよびNaNは、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。 -
集計関数では、
Inf、-InfおよびNaNの値は無視されません。NULL値は無視されます。集計(または任意のSELECTの結果)からInfおよびNaNを除外する場合は、IS NOT NAN条件およびIS NOT INFINITE条件の両方を使用します。