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

Функция

Определение проверки на 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;