如何将int32的原始比特位转换为float32?
如何将int32的原始比特位转换为float32?
我现在正尝试在C语言里生成一个随机浮点数,结果发现这事儿居然挺麻烦的——好像没有专门的标准库函数能直接搞定,大家都是用stdlib里的rand()做各种变通,但这些方法要么会损失精度,要么没法覆盖IEEE 754 32位浮点数的完整范围。
所以我想到一个办法:先用rand()生成一个32位的随机整数,然后让C语言把这个整数的原始比特位直接解读成浮点数。简单说就是,生成一个随机int32,然后把这些比特位对应的float值拿出来。
示例:
- 比特序列
1000 0100 1010 1010 1001 0111 1001 1110,作为32位补码整数时,对应的值是-2069194850 - 同样的比特序列,按照IEEE 754 32位浮点数规则解读时,对应的值是-4.01060463243591921024016E-36
既然它们在底层都是32位的,那肯定有办法让C把这些原始比特位当成float而不是int来解读吧?
但这种直接操作原始比特位的方法要怎么实现呢?有没有可能做到?
我想要的其实是一个类似这样的函数:
float make_float_from_int32(int32_t);
备注:内容来源于stack exchange,提问作者Sebastian Fiault
相关产品推荐
相关产品推荐

