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; }
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; }