3

使用 vsprintf 将内容写入文件。

输出格式为:

"tt2:%f, tt2:%x", tt2, *((int *)&tt2)

linux:</p>

gcc 4.4.5: -O2 -ffloat-store

在 linux.in 文件中是这样的:

tt2:30759。257812 , tt2:46f04e84

窗户:</p>

vs2005 sp1: /O2 Precise (/fp:precise)

在窗户里。文件中是这样的:

tt2:30759。257813 , tt2:46f04e84

为什么不一样?

====================================

我找到了我的案子的原因。

在 Windows 中,我使用 ofstream 输出到文件。它是 c++ 库。

在 linux 中,我只是使用 write 来输出到文件。这是c库。

当我在linux中使用ofstream时,输出是一样的。

毕竟谢谢大家~

4

1 回答 1

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和朋友可以选择显示任何两个十进制浮点数。

于 2012-09-07T08:00:45.117 回答