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

Функция

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