gpt4 book ai didi

C++比较函数结果

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:08 24 4
gpt4 key购买 nike

我有以下代码表现出一些非常奇怪的行为。有谁知道为什么。

#include <iostream>

long global = 20001;

double foo() {return global / 1000.0;}

int main(int,char**) {
if (foo() == foo()) {
std::cout << "true\n";
} else {
std::cout << "false\n";
}

return 0;
}

这应该打印 true,因为函数每次返回相同的结果,但打印 false;

这是在 Solaris 10 上使用 g++ 构建的。我不知道操作系统是否重要,但我还没有机会在不同的操作系统上尝试它

最佳答案

操作系统可能无关紧要,但编译器和架构做。在 Intel 上,通常的惯例是返回浮点寄存器中的浮点值,具有64 位精度(而不是 double 的 53 位)。和的当然,编译器会直接计算注册,所以你最终返回一个 64 位的值精度。

当然,当编译器生成调用函数的代码时,它不能将值留在寄存器中,因为函数可能使用那个寄存器。所以它把它溢出到内存中。作为一个双56 位。 == 运算符将这个 56 位值与首先调用第二个的 64 位值,发现他们不相等。

我可能会补充一点,如果编译器内联函数,问题可能会消失。

根据标准,所有这些都是完全合法的。

关于C++比较函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com