pow功能cout和printf的输出功能不同?

时间:2012-05-09 02:38:35

标签: c++ floating-point printf cout

我正在编写一个程序来计算2的负幂。 我使用了以下两个代码片段:

cout.precision(3);
cout << scientific << pow(2.0, p) << endl;

ans = pow(2.0, p);
printf("%.3e\n", ans);

对于p = -8271cout给出了正确答案(1.517e-2490),但我对printf(6.929e-310)的答案却大不相同。为什么会出现这种差异?

我在Ubuntu上使用Codeblocks。

1 个答案:

答案 0 :(得分:3)

我打赌那是因为anslong double,但你没有告诉printf期待long double。假设是这种情况,你想要的格式代码是%.3Le

g ++编译器甚至有一个警告来检测格式/参数不匹配(我认为它附带-Wall)但我总是喜欢iostream,因为它们是类型安全的。

所有这些当然假设p也是long double,导致编译器选择long double pow版本。