【问题标题】:c conversion from uint64 to float64_IEEE?c从uint64转换为float64_IEEE?
【发布时间】:2014-05-05 08:39:19
【问题描述】:

服务器代码:

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] 发送到客户端。 如何进行转换? 有人可以帮我吗??

【问题讨论】:

  • 抛开你的问题,对于数组uint64 measurements [17]measurements[17]是无效的。
  • 这是一个打字错误。
  • @user3603553 您可能需要更正它...
  • 您的代码并没有真正显示出您正在努力做的事情。 %u 读取 unsigned int 类型的值,在大多数地方它不是 uint64(如果我们假设 uint64 是 64 位无符号整数 - 其他任何东西都会相当愚蠢)
  • 正式地,另一个问题How to solve this C error in Eclipse 是由不同的用户提出的。但很可能是同一个人拥有两个帐户,或者是两个人做同样的作业——当数组定义为SomeType measurements[17]; 时,访问measurements[17] 确实看起来很系统。

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


【解决方案1】:

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

uint64 x = 12345132091298;
double d = x;

但是,这假定 x 的值小于 253 作为整数值,或者您不介意丢失底部位。换句话说,是这样的:

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

cout << d2 - d1 << endl; 

将导致零(假设编译器不是“聪明的”并在执行d2-d1 之前将结果计算为常量)。

我个人不会在“客户端”上转换为浮点数 - 处理原始数据的“稍后”(至少如果您(冒着)丢失数据的风险)更好,假设不需要减少数据(在这种情况下,它将 64 位转换为 64 位)。

【讨论】:

    【解决方案2】:

    假设您谈论的是 IEEE 754 标准,如果您的代码是可移植的,您应该实现自己的例程将值转换为该格式。

    如果不要求可移植性并且两种架构相同(您的机器和客户端机器)并且都使用符合 IEEE 754 的 FPU,您可以将该值转换为浮点数,然后将其传输到客户端。

    希望这能给你一些进一步研究的线索。

    编辑#1(回复评论):

    here

    【讨论】:

    • 你能给我举个小例子吗??
    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多