【发布时间】:2015-04-06 02:27:04
【问题描述】:
作为学校作业的一部分,我正在尝试计算 C++ 中双精度和浮点数的机器 epsilon 值。我在 Windows 7 64 位中使用 Cygwin,代码如下:
#include <iostream>
int main() {
double epsilon = 1;
while(1 + epsilon > 1)
epsilon = epsilon / 2;
epsilon = 2*epsilon;
std::cout << epsilon << std::endl;
float epsilon_f = 1;
while(1 + epsilon_f > 1)
epsilon_f = epsilon_f / 2;
epsilon_f = 2*epsilon_f;
std::cout << epsilon_f << std::endl;
return 1;
}
当我运行代码时,我收到两个值的 1.0842e-019。我查了一下,双精度值应该是 2.22e-16,浮点值应该是 1.19e-07。当我在 Macbook 上运行 exact 相同的代码时,代码会返回正确的值。什么可能导致我的 Windows 机器出现差异?
【问题讨论】:
-
尝试将 -mfpmath 更改为 sse 或 387,并使用 -m64 确保两者都处于 64 位模式。 cygwin 可能默认使用与 macbook 不同的东西。还有-fno-fast-math
-
如果您还在,并且发现我的回答有帮助,请将其标记为已接受 - 这样,其他人以后就不会偶然发现这个问题并认为它仍然需要回答。此外,如果答案没有帮助,请随时询问更多信息。
标签: c++ double precision epsilon