
On Thu, 03 Aug 2006 16:59:25 +0200, Gennaro Prota <gennaro_prota@yahoo.com> wrote:
For instance:
// widely (not completely) portable void calculate() [...]
Sorry I was in a hurry when I wrote that. This is better: void calculate() // very meaningful name that I // preferred to keep { typedef float T; typedef unsigned char byte; T plus_1( 1 ); T minus_1( -1 ); const volatile byte * b_plus = reinterpret_cast<const volatile byte *>(&plus_1); const volatile byte * b_minus = reinterpret_cast<const volatile byte *>(&minus_1); bool found = false; int pos = 0; byte mask = 0; for (int i = 0; i < sizeof( T ); ++i ) { if ( b_plus[i] != b_minus[i] ) { assert( !found ); mask = b_plus[i] ^ b_minus[i]; pos = i; found = true; assert( (mask & (mask-1)) == 0 ); } } assert(found == true); std::cout << "sign bit at byte " << pos <<", mask is " << static_cast<unsigned>( mask ) << '\n' ; } -- [ Gennaro Prota, C++ developer for hire ]