2
0
mirror of https://github.com/boostorg/test.git synced 2026-01-24 06:22:12 +00:00
Files
test/example/unit_test_example_01.cpp
Gennadiy Rozental 397ab3f64d *** empty log message ***
[SVN r33387]
2006-03-19 12:01:54 +00:00

53 lines
1.3 KiB
C++

#include <iostream>
namespace ieee_754 {
template<typename T>
struct decoded {
typedef long long mantissa_holder_type;
typedef short exponent_holder_type;
bool p_sign;
mantissa_holder_type p_mantissa;
exponent_holder_type p_exponent;
};
//___________________________________________________________________________//
void decode( double v, decoded<double>& d )
{
union {
double v;
long long m;
} tmp;
tmp.v = v;
d.p_sign = !(tmp.m & 0x8000000000000000LL);
d.p_mantissa = tmp.m & 0x000FFFFFFFFFFFFFLL;
d.p_exponent = (short)((tmp.m & 0x7FF0000000000000LL) >> 52) - 1075;
if( d.p_exponent != 0 )
d.p_mantissa |= 0x0010000000000000LL;
}
//___________________________________________________________________________//
} // namespace ieee_754
using namespace ieee_754;
int
main()
{
double d = 0.2;
decoded<double> dec;
decode( d, dec );
std::cout << "orig = " << std::hex << *(long long*)&d << std::endl;
std::cout << "dec.p_sign = " << (dec.p_sign ? '+' : '-') << std::endl;
std::cout << "dec.p_mantissa = " << std::hex << dec.p_mantissa << std::endl;
std::cout << "dec.p_exponent = " << std::dec << dec.p_exponent << std::endl;
}