【发布时间】:2015-05-06 15:06:02
【问题描述】:
考虑代码
#include <iostream>
int main() {
std::cout << 4.2L;
}
在MinGW 上编译并运行结果如下:
> g++ test.cc
> a.exe
-7.89773e-278
这是 MinGW 中的错误吗?是否有修复或解决方法?
更新:
在this question 中描述的printf 存在类似问题:
#include <cstdio>
int main() {
std::printf("%Lg", 4.2L); // prints -7.89773e-278
}
但是,printf 的问题可以通过定义 __USE_MINGW_ANSI_STDIO 来解决,而这个不能,所以我认为它值得一个单独的问题。
【问题讨论】:
-
可能是个bug,查看这个问题的答案link
-
这似乎与linked question 中描述的错误几乎相同。 MinGW 使用 gcc 编译器和微软的运行时库;他们对
long double有不同的表示。得分最高的答案(不是公认的答案)提到了printf的解决方法,使用-D__USE_MINGW_ANSI_STDIO;我很想知道cout << ...是否有类似的解决方法。 -
感谢您的链接。我刚刚检查过,printf 也存在类似的问题,所以它可能是相关的。
-
不幸的是 __USE_MINGW_ANSI_STDIO 只修复了 printf 的输出。我已经更新了问题。
-
此代码在 mingw-w64 4.9.2(32 位和 64 位)中正常工作