C 程序从 s64 到 double 的转换错误?

标签 c linux types double signed

在内核中:我正在读取类型为 extern s64 Latency;

的时间值

在用户空间:

extern double latency;
//fp is reading the kernel value (i.e Latency)
fscanf (fp,"%lf", latency);  

如果我从内核读取 s64 作为用户空间中的 double 。有没有数据丢失的可能?? 我应该使用哪种数据类型来获取完整的值?

最佳答案

简短的回答:是的,肯定会丢失数据。

想一想,有符号 64 位整数 (s64) 和 double 都有 64 位存储空间。但是 s64 只关心整数,而 double 也可以表示分数。为此,它需要利用某些位来获取此信息,因此它无法表示完整范围的 64 位整数。

您应该使用工具链的 stdint.h 中的 int64_t

关于C 程序从 s64 到 double 的转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602887/

相关文章:

c - gcc 在一个小小的 hello world 程序中返回大量错误

c - 重新分配多维数组

c - 如何打开具有相同本地端口的两个 udp 客户端套接字

linux - 用top判断Linux进程内存

delphi - Delphi 的基本类型如何相互关联?

c++ - 有没有办法加快c/c++中多播消息的连接时间?

Linux - 使用 "script"监控远程命令

c# - obj.GetType().IsInstanceOfType(typeof(MyClass)) 什么时候为真?

c++ - result_of 无法推断出返回类型

c - gcc 无法识别某些 SDL 函数