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は、数値データ型、または暗黙的に数値データ型に変換可能なデータ型に解決される必要があります。

次の表に、浮動小数点の条件を示します。

条件 操作

IS [NOT] NAN

NOTを指定していないときに、Expressionの値がNaNになる場合は、TRUEが返されます。NOTを指定しているときに、Expressionの値がNaNにならない場合は、TRUEが返されます。

SELECT * FROM bfdemo WHERE id IS
NOT NAN;
ID, ID2
< INF, 50 >
1 row found.

IS [NOT] INFINITE

NOTを指定していないときに、Expressionの値が+Infまたは-Infになる場合は、TRUEが返されます。NOTを指定しているときに、Expression+Inf-Infのどちらでもない場合は、TRUEが返されます。

SELECT * FROM bfdemo WHERE id IS
NOT INFINITE;
ID, ID2
< NAN, 100 >
1 row found.

ノート:

定数キーワードは、特定のBINARY_FLOAT値およびBINARY_DOUBLE値を表します。比較キーワードは、値のプロパティに対応しており、いずれの型に対しても固有ではありません(ただし、BINARY_FLOAT型、BINARY_DOUBLE型、またはBINARY_FLOATBINARY_DOUBLEに変換可能な型に対しては、TRUEとしてのみ評価されます)。

InfNaNの比較には、次のルールが適用されます。

  • 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条件の両方を使用します。