
Martin Bonner wrote:
That is not to say that the bit test via mask is not potentially useful, just that one should be aware of its limitations.
It could be useful on some platforms that do not have a predefined signbit macro/function. The problem we are running into is: How do you convert a value of type S to a value of type T, so that the bitpattern is preserved? (It is of course assumed that sizeof(S) == sizeof(T).) Maybe this task should be put in a separate template, something like template<class T, class S> T binary_cast(const& S s); Gennaro Prota suggests implementing this using reinterpret_cast<const volatile byte*>. Then the signbit test could be implemented, for some platforms, as follows: const std::bitset<sizeof(float)> signbit_mask = binary_cast<std::bitset<sizeof(float)> >(1.0f) ^ binary_cast<std::bitset<sizeof(float)> >(-1.0f); bool signbit(float x) { return (binary_cast<std::bitset<sizeof(float)> >(x) & signbit_mask) == signbit_mask; } This can be templatized, and will handle such things as 80-bit long double. --Johan Råde