Я попытался этот код для представления системы хранения чисел с плавающей запятой:
float *f = new float();
int *i = new int();
i = reinterpret_cast<int *>(f);
std::bitset<32> *bs;
std::cin>>*f;
bs = new std::bitset<32>(*i);
std::cout<<*bs<<" == "<<*f<<std::endl;
Но когда он работает с 23,5, результат 01000001-10111100-00000000-00000000
, Сила 10000001=63
,
Разве это не должно быть 64 из-за стандарта IEEE?
И богомол должен быть 00010111-10000000-00000000
, Это правда?
ЗаметкаЯ скомпилировал этот код с GCC и VS оба. Результат был таким же.
01000001-10111100-00000000-00000000
0 10000011 01111000000000000000000
sign: 0
exponent: 10000011_binary = 131_decimal
mantissa: 01111000000000000000000_binary
mantissa is defined by 1.<mantissa>
so -> 1.01111_binary
exponent is defined this way: exp-127
-> 131-127 = 4
-> 1.01111_binary * 2^4
-> comma shift to the right by 4
--> 10111.1_binary = 23.5_decimal
в общем-то:
(-1)^sign * 1.<mantissa> * 2^(exponent-127)
Других решений пока нет …