Это понятно! А что с экспонентой то делать. В дабле 11 бит, а во флоате - 8.
То что раньше делал - не влезает в long int результат умножения . Пошёл по такому пути.
typedef struct { unsigned long int mantissa_lo : 29; unsigned long int mantissa_hi : 23; unsigned char exponent_lo : 4; unsigned char exponent_hi : 7; unsigned char sign : 1; } double_format;
typedef struct { unsigned long int mantissa : 23; unsigned char exponent : 8; unsigned char sign : 1; }float_format;
union double_union { double_format dbl; unsigned char b[8]; }dbl_union;
union float_union { float_format flt; float F; unsigned char b[4]; }flt_union;
|