From: Johan Råde (rade_at_[hidden])
Date: 2006-08-04 04:35:19
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
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,
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.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk