Example #1
0
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;
}
Example #2
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;
}
Example #3
0
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;
  
}
Example #4
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++;
    }
}
Example #5
0
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;
}
Example #6
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;
}