精度值以intBitsTofloat格式在C中表示
我有一个双精度值=10.233387434223。我想通过网络传输。 我使用 以下函数精度值以intBitsTofloat格式在C中表示,c,64-bit,bit-manipulation,C,64 Bit,Bit Manipulation,我有一个双精度值=10.233387434223。我想通过网络传输。 我使用 以下函数 int floatToRawIntBits(float_t x) { union { float_t f; // assuming 32-bit IEEE 754 single-precision int32_t i; // assuming 32-bit 2's complement int } u; u.f = x; return u.i; }
int floatToRawIntBits(float_t x)
{
union {
float_t f; // assuming 32-bit IEEE 754 single-precision
int32_t i; // assuming 32-bit 2's complement int
} u;
u.f = x;
return u.i;
}
然后我试着用这个函数返回这个
union int_float_bits {
int64_t int_bits;
float_t float_bits;
};
float_t intBitsToFloat:(int64_t x)
{
union int_float_bits bits;
bits.int_bits = x;
return bits.float_bits;
}
输出为:10.233387。
但是我想得到10.233387434223的原始值,而不是10.233387
intBitsToDouble是否是一种可能的解决方案
我也尝试使用这些代码
int DoubleToRawIntBits(double_t x)
{
union {
double_t f;
int64_t i;
} u;
u.f = x;
return u.i;
}
及
但这里的结果是0.0000000
请帮助我,谢谢。您的问题是第一个函数只返回64位双精度中的32位。仅传输这32位。因此,下一个函数不能构造整个double,因为它实际上没有double的32位。它不能无中生有地获取信息。如果它不在那里,它就不在那里。你需要传输整个双倍的数据。我不知道你到底在做什么,但如果你能发送32位,你也应该能发送64位。如果你想保留一个双精度,为什么要在任何地方使用float?当你施放浮动时,你就失去了你想要保持的精度。你不能在任何地方都使用双精度和64位整数吗?我在整个代码中使用双精度而不是浮点型。但是结果是0.0000。您能显示结果为0.0000的代码吗?但是结果5.232444232211与实际值233387434223相差很远
union int_double_bits {
int64_t int_bits;
double_t double_bits;
};
double_t intBitsToDouble(int64_t x)
{
union int_double_bits bits;
bits.int_bits = x;
return bits.double_bits;
}