Предикат неверного вещественного значения

Функция

Определение проверки на NaN-значение.

Спецификация
 
< предикат неверного вещественного значения >::=
Общие правила
  1. Значение NaN (Not a number – не число) применимо для вещественных чисел (REAL, DOUBLE) и обозначает результат некорректной арифметической операции (типа деления ноля на ноль или бесконечность).

    0*∞=NaN
    0/0=NaN
    ∞/∞=NaN
    +X/0=NaN
    -+X/0=NaN
    (x – положительное вещественное число)
  2. При сортировке NaN-значения считаются наибольшими из всех определенных вещественных чисел (NULL-значение не является определенным числом).

  3. Любые операции над NaN-значением в качестве результата дают другое NaN-значение.

  4. < Значимое выражение > не должно быть < запросом выборки >.

  5. Конструкция '< значимое выражение > IS NaN' имеет одно из двух значений: истина (TRUE) или ложь (FALSE).

  6. Конструкция '< значимое выражение > IS NaN' истинна только тогда, когда < значимое выражение > имеет NaN-значение.

  7. Конструкция '< значимое выражение > IS NOT NaN' эквивалентна 'NOT (< значимое выражение > IS NaN)'.

  8. Утилиты СУБД ЛИНТЕР NaN-значения выводят на экран в виде символьных значений следующего вида:

    • +INF: положительная бесконечность;

    • -INF: отрицательная бесконечность;

    • IND: неопределенность;

    • NaN: не число.

Пример
create or replace table test( d double );
insert into test select cast( HEXTORAW('000000000000F0FF0000000000000000') ) as double;
insert into test values(1.1);
insert into test values(2.2);
insert into test values(3.3);
insert into test;
insert into test select cast( HEXTORAW('000000000000F07F0000000000000000') ) as double;
insert into test select cast( HEXTORAW('000000000000F8FF0000000000000000') ) as double;
create index d on test;
select * from test order by d;
select * from test where d is NaN;
select * from test where d is NOT NaN;