Моделирование nan/inf в шаблоне переменных constexpr
Есть ли способ симулировать нано / инф в постоянном выражении и без! используя макросы C HUGE_VAL и INFINITY или любые другие в этом отношении! Плюс, даже с ними, это все еще не constexpr.
Я не хочу использовать какие-либо стандартные функции, которые предоставляет стандартная библиотека C++ или стандартная библиотека C.
Конечно, следующее не компилируется. Компилятор говорит, что переменная constexpr должна быть инициализирована константным выражением...
template<typename T = double>
constexpr T NaN = T(0.0 / 0.0);
Метод, который использует компилятор MSVC, также не компилируется:
template<typename T = double>
constexpr T NaN = T(1e+300); //with some changes, apparently having the float overflow
Я знаю, что это довольно широко, но это для библиотеки, и я ищу несколько образованных советов! Спасибо!
1 ответ
__builtin_nan("0")
Я проверил это с помощью проводника компиляторов, и, похоже, он поддерживается в gcc 6.1+, clang 6.0.0+, MSVC v19.24+ и многих других необычных компиляторах.
Используйте то, что предоставляет компилятор. Это единственный нестандартный способ. Проверьте, предоставляет ли ваш компилятор эту функцию и как. Также имейте в виду, что стандартная библиотека предоставляетstd::numeric_limits<T>::has_quiet_NaN
по причине.