Подскажите как такое сделать:
Нужны некоторае константы типов float и double, которые бы выполняли функции "недействительного числа", по аналогии с NULL для недействительных указателей на объекты.
Такая константа могла бы храниться в переменных; с этим значением были бы допустимы сравнения (равно/неравно) и присваивания.
Но любые арифметические операции с использованием такого значения, а также любые встроенные функции типа sin(), cos() приводили бы к выбрасыванию исключения.
Что нибудь из "специальных" значений float подойдет? (SNAN, QNAN, бесконечности?)
Нашел такую штуку как _controlfp(_EM_INEXACT, _MCW_EM), после которой любая работа с "сигнальным" не-числами приводит к исключению. В частности, простая попытка присвоить не-число переменной вызывает исключение:
float n = std::numeric_limits<float>::signaling_NaN();
Но это мне не нужно! Нужно чтобы исключение вываливалось лишь при попытке арифметических операций с не-числами.