почему эти два вызова функции toBinary вычисляют один и тот же результат (по крайней мере, в VS2010)?
#include <iostream>
#include <bitset>
#include <limits>
using namespace std;
template<class T> bitset<sizeof(T)*CHAR_BIT> toBinary(const T num)
{
bitset<sizeof(T)*CHAR_BIT> mybits;
const char * const p = reinterpret_cast<const char*>(&num);
for (int i = sizeof(T)*CHAR_BIT-1 ; i >= 0 ; --i)
mybits.set(i, (*(p)&(1<<i) ));
return mybits;
}
int main()
{
cout << toBinary(8.9).to_string() << "\n";
cout << toBinary( 8.9 + std::numeric_limits<double>::epsilon() ).to_string() << "\n";
cin.get();
}
number*epsilon
дает вам значение, которое, добавленное кnumber
, обязательно изменит его, в то время как при этом у вас нет гарантий. 15.04.2011