54 unsigned int float_to_uint32(
float value,
char exponent,
char significand,
char denorm )
57 unsigned int newval, tmpsig;
71 if (tmpexp > denorm && tmpsig&1) {
73 if ( tmpsig&( 1<<(significand+1) ) ) {
75 tmpsig -= 1<<(significand+1);
80 if (tmpexp == denorm) {
83 if ( tmpsig&(1<<significand) ) {
85 tmpsig -= 1<<significand;
88 tmpsig |= 1<<significand;
92 }
else if (tmpexp < denorm) {
93 tmpsig |= 1<<significand;
94 tmpsig >>= denorm-tmpexp;
100 }
else if (tmpexp >= (1<<exponent)+denorm) {
102 tmpsig =
BITMASK( significand );
106 newval |= (tmpexp<<significand)|tmpsig;
110 float uint32_to_float(
unsigned int value,
char exponent,
char significand,
char denorm )
116 newval.
u32_val = ( 1<<(exponent+significand) )&value;
117 newval.
u32_val <<= 31-(exponent+significand);
118 tmpsig = value&
BITMASK( significand );
119 tmpexp = value&(
BITMASK( exponent )<<significand);
120 tmpexp >>= significand;
122 if (tmpexp == 0 && tmpsig == 0) {
125 }
else if (tmpexp == 0) {
127 while ( !( tmpsig&(1<<significand) ) ) {
131 tmpsig -= 1<<significand;
133 tmpexp += 127+denorm;