don't know of a great solution but under IEEE class floats can't you
compute the numbers...
NaN = 0/0
+inf = +1/0
-inf = -1/0
+0 = 0/+1
-0 = 0/-1
etc.
The +/-0 formulas work, but not the NaN and +/-Inf ones (divide by zero generates a floating point exception). Thankfully, can't we use numeric_limits for some of these?
std::numeric_limits<T>::infinity()
std::numeric_limits<T>::quiet_NaN()
std::numeric_limits<T>::signaling_NaN()
std::numeric_limits<T>::denorm_min()