我试图解决一个问题,我需要将无符号浮点数的位级等效值返回到4。
到目前为止,我一直在探索其他答案,发现一个与我的非常相似,但也没有用。实际上没有给出解释,所以当我运行测试用例时,我试图理解我的错误。
当我测试我的问题时,我得到了
33554432 [0x2000000]。
但我应该
25165824 [0x1800000]
到目前为止,我的代码是
dplyr
有什么建议吗?
答案 0 :(得分:1)
除非您实际编写的是软件浮点仿真器(在这种情况下,您需要的帮助超出我们的帮助),您应该让编译器处理这个问题:
#include <stdint.h>
#include <assert.h>
static_assert(sizeof(float) == sizeof(uint32_t));
uint32_t multiply_by_4_as_float(uint32_t n)
{
union {
uint32_t u;
float f;
} conv;
conv.u = n;
conv.f *= 4;
return conv.u;
}
(在使用技术corrigienda的C1999中,以及在C2011中,这种联合使用的行为有未明确但未定义的行为。在C1989中它未定义,在C ++中它可能仍未定义。)
(如果你问这个问题是因为你需要在一个程序中做一点浮点运算,不能使用硬件浮点单元具体原因,请检查您的编译器文档 - 您可以设置一个选项,使其使用自己的软件FP。但请记住,软件浮点数数量级比硬件。)