【发布时间】:2015-06-11 16:30:15
【问题描述】:
如何重现这种行为? https://isocpp.org/wiki/faq/newbie#floating-point-arith2
准确来说,在下面的代码中,参数x和y是相等的;它们可以等于 1.0 或任何其他值。
void foo(double x, double y)
{
double cos_x = cos(x);
double cos_y = cos(y);
// the behavior might depend on what's in here
if (cos_x != cos_y) {
std::cout << "Huh?!?\n"; // You might end up here when x == y!!
}
}
一些编译器选项?环形?有什么想法吗?
【问题讨论】:
-
你不能。这完全取决于您的配置,会发生什么。这就是为什么会有评论
// You might end up here when x == y!! -
尝试一个高精度(读作:非常长)的数字,您可以输入许多小数位,看看会发生什么。
-
你需要一个旧版本的 C 编译器,它仍然生成具有可怕的 80 位内部格式的 FPU 代码,并且有足够的精力来修补代码以便优化器破坏它。那是你生命中永远不会回来的一周。关键是,这可能会发生,而您无需寻找它。
-
我认为这不会像文章所说的那样发生。它可能发生,但可能性不大
-
@HansPassant 所以使用新的编译器理论上不会发生这种情况?即使有一些编译器选项?
标签: c++ c floating-point-precision x87