C / C ++与Nan比较(不同浮点模型上的不同行为)

时间:2015-06-11 09:20:13

标签: c++ visual-c++ floating-point floating-point-precision ieee-754

这里有一点测试代码:

float zeroF = 0.f;
float naNF = 0.f / zeroF;
float minimumF = std::min(1.0f, naNF);
std::cout << "MinimumF " << minimumF << std::endl;

double zeroD = 0.0;
double naND = 0.0 / zeroD;
double minimumD = std::min(1.0, naND);
std::cout << "MinimumD " << minimumD << std::endl;

我在VS2013上执行了代码。

在精确模型(/ fp:precise)上,输出始终为“1”;

在快速模型(/ fp:fast)上,如果启用优化(/ O2),输出将为“Nan”( - 。#IND),如果禁用优化(/ Od),则输出为“1”。

首先,根据IEEE754,正确的输出应该是什么? (我阅读了文档,并搜索了不同的文章,如:What is the rationale for all comparisons returning false for IEEE754 NaN values?,似乎正确的输出应该由Nan而不是1,但也许我错了。

其次,这里的快速模型优化如何大幅改变输出?

0 个答案:

没有答案