这是一个简单的C ++代码,我在Windows 8.1 64bit上使用 TDM-GCC 5.1 32位(gcc-5.1.0-tdm-1-core)进行编译英特尔酷睿i-7机器。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a, b;
a = 0.002;
b = 0.004;
cout << std::sqrt(a*a+b*b)<< endl;
return 0;
}
但在运行时,它会提供以下输出
nan
但是,它可以在 32位计算机上使用TDM-GCC 32位编译器正常工作。
此外,当我将数据类型更改为 float 时,它在32位和64位计算机上都能正常工作。
这里有什么问题?
答案 0 :(得分:1)
问题如下:
它是使用以下命令(缩小)在Code :: Blocks中本身编译的:
g++.exe -L"C:\Program Files (x86)\GnuWin32\lib" -o main.exe main.cpp -lm
其中 C:\ Program Files(x86)\ GnuWin32 \ lib 有一个名为 libm.a 的旧数学库。
因此,在将-lm
和-L"C:\Program Files (x86)\GnuWin32\lib"
放在一起时,可以使用进程资源管理器找到 main.exe 正在使用相应的旧< strong> libm5.dll ,似乎不兼容。
因此,如果至少有一个选项 -lm
或-L"C:\Program Files (x86)\GnuWin32\lib"
被删除并按如下方式编译:
g++.exe -L"C:\Program Files (x86)\GnuWin32\lib" -o main.exe main.cpp
或
g++.exe -o main.exe main.cpp -lm
或
g++.exe -o main.exe main.cpp
它没有链接旧libm.a
因此正确运行。