浮点值加倍和除法
Doubling and dividing floating point values
我有一个函数,我相信它会将 int 转换为浮点值,并将其分为值的符号指数和小数部分。使用 IEEE 754 表示浮点值。
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;
}
不过我不确定如何从这个浮点表示中计算出减半或加倍的值。
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 ...
}
您似乎使用 IEEE 754 来表示 Float 值。
如果你想将二进制表示加倍,你只需要将指数递增1。想减半也是一样,减1
即可
请记住,只有当您的数字在正常范围内时,这才是正确的,即使在翻倍或减半之后也是如此
我有一个函数,我相信它会将 int 转换为浮点值,并将其分为值的符号指数和小数部分。使用 IEEE 754 表示浮点值。
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;
}
不过我不确定如何从这个浮点表示中计算出减半或加倍的值。
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 ...
}
您似乎使用 IEEE 754 来表示 Float 值。
如果你想将二进制表示加倍,你只需要将指数递增1。想减半也是一样,减1
即可请记住,只有当您的数字在正常范围内时,这才是正确的,即使在翻倍或减半之后也是如此