我将uint32_t更改为float,但未更改实际位。
只是为了确保:我不想抛弃它。那么float f = (float) i
是什么我wan't做的,因为它改变了位正好相反。
我将使用此函数将我的(伪)随机数转换为浮点数,而无需执行不需要的数学运算。
我当前正在做的并且已经在工作的是:
float random_float( uint64_t seed ) {
// Generate random and change bit format to ieee
uint32_t asInt = (random_int( seed ) & 0x7FFFFF) | (0x7E000000>>1);
// Make it a float
return *(float*)(void*)&asInt; // <-- pretty ugly and nees a variable
}
问题:现在,我想摆脱asInt
变量,并且想知道是否有更好/不太丑陋的方法来获取此变量的地址,将其强制转换两次并再次取消引用?
您可以尝试合并-只要确保类型在内存大小上相同:
union convertor {
int asInt;
float asFloat;
};
然后,您可以将int分配给asFloat(或者,如果需要的话)。当我需要一方面进行按位运算而另一方面仍要获得uint32_t表示时,我经常使用它
[编辑]
就像许多注释器正确指出的那样,您必须考虑不能由NAN,+ INF,-INF,+ 0,-0等整数表示的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句