J'ai la fonction qui, selon moi, va convertir un int en une valeur à virgule flottante divisée en l'exposant du signe et fractionner les composantes de la valeur. Utiliser IEEE 754 pour représenter les valeurs Float.Doubler et diviser les valeurs à virgule flottante
unsigned test(unsigned x) {
// split the given bits of sign exponent and fraction, combine to return
unsigned int sign = (x & 0x80000000) >> 31;
unsigned int expo = (x & 0x7F800000) >> 23;
unsigned int frac = (x & 0x007fffff);
return (sign << 31) | (expo << 23) | frac;
}
Je ne suis pas sûr cependant comment je pourrais calculer les valeurs coupées en deux ou doublé de cette représentation à virgule flottante.
unsigned doubled(unsigned x) {
// get float
// float = unsigned int to float
// doubleFloat = 2*f
// if float is not a number
// return unsigned float
// else return unsigned integer of half float
unsigned int sign = (x & 0x80000000) >> 31;
unsigned int expo = (x & 0x7F800000) >> 23;
unsigned int frac = (x & 0x007fffff);
if (expo == 0xff)
return uf;
else ...
}
Tout exposant de changement. Flottant = Fraction * 2^exposant * (signe? -1: 1). Notez, ici exposant est une valeur signée. – slavanap