c从uint64转换为float64_IEEE?

时间:2014-05-05 08:39:19

标签: c++ c linux floating-point type-conversion

服务器代码:

s64 interrupt;

以上是内核代码,我正在通过用户应用程序读取上述值,如下所示。

用户代码:

uint64 measurements [17];
uint64 Latency; 
fscanf (fp, "%u", Latency);  // I am reading the interrupt from server code using fscanf
measurements[17] = Latency;

但最后我想将FLOAT64_IEEE格式的测量[17]发送到客户端。 怎么做那个转换? 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

将64位整数转换为double的基本方法是

uint64 x = 12345132091298;
double d = x;

然而,这假设x的值小于2 53 作为整数值,或者你不介意丢失最后一位。换句话说,就像这样:

uint64 x1 = 1 << 53;
uint64 x2 = x + 1;
double d1 = x1;
double d2 = x2;

cout << d2 - d1 << endl; 

将导致零(假设编译器不是&#39; t&#34;聪明&#34;并且在执行d2-d1之前将结果计算为常量)。

我个人不会在&#34;客户端&#34;上转换为浮点数。 - &#34;以后&#34;你处理你的原始数据(至少如果你(冒险)丢失数据),假设不需要减少数据(在这种情况下,它将64位转换为64位),那就更好了-Bits)。

答案 1 :(得分:1)

假设您正在谈论IEEE 754标准,那么您应该实现自己的例程,以便在您的代码可移植时将值转换为该格式。

如果不需要可移植性并且两种架构都相同(您的计算机和客户端计算机)并且都使用符合IEEE 754的FPU,则可以将该值转换为float,然后将其传输到客户端。 / p>

希望这能为你提供进一步研究的线索。

编辑#1(回复评论):

请参阅here