int main() { ulli number; uint new_exponent; printf(" ................\n"); printf("Enter 16 hexadeximal digits: "); scanf("%llx", &number); printf("Enter hexadeximal digits for new exponent: "); scanf("%x", &new_exponent); printf("\n"); printf("entered number (hex) %016llx\n", number); printf("number of exp bits are (dec) %16u\n", exp_bits(number)); printf("value of exponent is (hex) %16x\n", get_exponent(number)); printf("value of mantissa is (hex) %16llx\n", get_mantissa(number)); number = set_exponent(number, new_exponent); printf("\n"); printf("modified number (hex) %016llx\n", number); printf("number of exp bits are (dec) %16u\n", exp_bits(number)); printf("value of exponent is (hex) %16x\n", get_exponent(number)); printf("value of mantissa is (hex) %16llx\n", get_mantissa(number)); return 0; }
float_utilst::unbiased_floatt float_utilst::unpack(const bvt &src) { assert(src.size()==spec.width()); unbiased_floatt result; result.sign=sign_bit(src); result.fraction=get_fraction(src); result.fraction.push_back(is_normal(src)); // add hidden bit result.exponent=get_exponent(src); assert(result.exponent.size()==spec.e); // unbias the exponent literalt denormal=bv_utils.is_zero(result.exponent); result.exponent= bv_utils.select(denormal, bv_utils.build_constant(-spec.bias()+1, spec.e), sub_bias(result.exponent)); result.infinity=is_infinity(src); result.zero=is_zero(src); result.NaN=is_NaN(src); return result; }
int main(int argc, char* argv[]){ union Float_bits f; f.f=-2.0; char sign; char mantissa[23]; uint32_t fraction; uint32_t exponent; fraction = f.bits; sign=get_sign_bit(f.bits); exponent=get_exponent(f.bits); for(int i=0;i<MANTISSA_WIDTH;i++) mantissa[i]=get_bit(fraction,i+9); //+9 to account for the starting bits of num (1 sign bit + 8 exponent bits) print_float_bits(sign,mantissa,exponent); return 0; }
void WavpackFloatNormalize (int32_t *values, int32_t num_values, int delta_exp) { f32 *fvalues = (f32 *) values; int exp; if (!delta_exp) return; while (num_values--) { if ((exp = get_exponent (*fvalues)) == 0 || exp + delta_exp <= 0) *fvalues = 0; else if (exp == 255 || (exp += delta_exp) >= 255) { set_exponent (*fvalues, 255); set_mantissa (*fvalues, 0); } else set_exponent (*fvalues, exp); fvalues++; } }
static inline void get_nconst () { CTok.type = CONSTANT; CTok.p = &Cpp [Ci]; while (isalnum (Cpp [Ci])) if (++Ci >= Clen) break; if (Cpp [Ci] == '.') { get_float_frac (); CTok.type = FCONSTANT; } if (Cpp [Ci] == 'e' || Cpp [Ci] == 'E' || Cpp [Ci] == 'p') { get_exponent (); CTok.type = FCONSTANT; } while (ISNIEND (Cpp [Ci])) if (++Ci >= Clen) break; CTok.len = &Cpp [Ci] - CTok.p; }
void float_values (WavpackStream *wps, int32_t *values, int32_t num_values) { uint32_t crc = wps->crc_x; if (!bs_is_open (&wps->wvxbits)) { float_valuesnowvx (wps, values, num_values); return; } while (num_values--) { int shift_count = 0, exp = wps->float_max_exp; f32 outval = 0; uint32_t temp; if (*values == 0) { if (wps->float_flags & FLOAT_ZEROS_SENT) { if (getbit (&wps->wvxbits)) { getbits (&temp, 23, &wps->wvxbits); set_mantissa (outval, temp); if (exp >= 25) { getbits (&temp, 8, &wps->wvxbits); set_exponent (outval, temp); } set_sign (outval, getbit (&wps->wvxbits)); } else if (wps->float_flags & FLOAT_NEG_ZEROS) set_sign (outval, getbit (&wps->wvxbits)); } } else { *values <<= wps->float_shift; if (*values < 0) { *values = -*values; set_sign (outval, 1); } if (*values == 0x1000000) { if (getbit (&wps->wvxbits)) { getbits (&temp, 23, &wps->wvxbits); set_mantissa (outval, temp); } set_exponent (outval, 255); } else { if (exp) while (!(*values & 0x800000) && --exp) { shift_count++; *values <<= 1; } if (shift_count) { if ((wps->float_flags & FLOAT_SHIFT_ONES) || ((wps->float_flags & FLOAT_SHIFT_SAME) && getbit (&wps->wvxbits))) *values |= ((1 << shift_count) - 1); else if (wps->float_flags & FLOAT_SHIFT_SENT) { getbits (&temp, shift_count, &wps->wvxbits); *values |= temp & ((1 << shift_count) - 1); } } set_mantissa (outval, *values); set_exponent (outval, exp); } } crc = crc * 27 + get_mantissa (outval) * 9 + get_exponent (outval) * 3 + get_sign (outval); * (f32 *) values++ = outval; } wps->crc_x = crc; }