混淆浮点数
int main()
{
float x=3.4e2;
printf("%f",x);
return 0;
}
输出:
340.000000 //没关系。
但如果写x=3.1234e2
输出为312.339996
,如果x=3.12345678e2
,则输出为312.345673
。
为什么输出会像这样?我想如果我写x=3.1234e2
输出应该是312.340000
,但实际输出是312.339996
使用GCC编译器。
没有找到相关结果
已邀请:
2 个回复
梦砍废么
0.5具有精确的表示,但0.1将显示为0.125。 当然,真正的差异要小得多。
俯乡骚钵皆
通常是32位长,这意味着它没有那么多有效数字。您可以在示例中看到它们精确到大约8位有效数字。 但是,您打印的数字略超出其重要性,因此您会看到差异。查看
格式的字符串文档,了解如何打印更少的数字。 您可能需要准确表示十进制数;这通常发生在金融应用程序中。在这种情况下,您需要使用特殊库来表示数字,或者只是将所有内容计算为整数(例如将金额表示为美分而不是美元和一美元的分数)。 标准参考是每个计算机科学家应该知道的关于浮点算术的内容,但看起来这对你来说非常先进。或者,您可以使用谷歌浮点格式(特别是IEEE标准格式)或在维基百科上查找它们,如果您想要详细信息。