使用vsprintf将内容写入文件。
输出格式为:
"tt2:%f, tt2:%x", tt2, *((int *)&tt2)
的Linux:
gcc 4.4.5: -O2 -ffloat-store
在linux.in文件中是这样的:
tt2:30759。 257812 ,tt2:46f04e84
窗口:
vs2005 sp1: /O2 Precise (/fp:precise)
在Windows中。在文件中是这样的:
tt2:30759。 257813 ,tt2:46f04e84
为什么会有所不同?
==================================
我找到了我的理由。
在windows中,我使用ofstream输出到文件。它是c ++ lib。
在linux中,我只是使用write来输出到文件。这是c lib。
当我在linux中使用ofstream时,输出是相同的。
毕竟,谢谢大家〜
答案 0 :(得分:1)
浮点数以二进制形式存储在计算机中。将它们打印到十进制浮点时,它们有多个正确的表示形式。在您的情况下,它们都是正确的,因为它们都转换回原始的二进制浮点值。看看这个文件的输出,我使用GCC编译:
#include <stdint.h>
#include <stdio.h>
int main()
{
float a = 30759.257812f;
float b = 30759.257813f;
printf("%x\n%x\n", *(uint32_t *)&a, *(uint32_t *)&b);
}
输出:
46f04e84
46f04e84
因此,printf
和朋友的实现可以选择显示两个十进制浮点数中的任何一个。