我正在编写一个程序来计算2的负幂。 我使用了以下两个代码片段:
cout.precision(3);
cout << scientific << pow(2.0, p) << endl;
和
ans = pow(2.0, p);
printf("%.3e\n", ans);
对于p = -8271
,cout
给出了正确答案(1.517e-2490),但我对printf
(6.929e-310)的答案却大不相同。为什么会出现这种差异?
我在Ubuntu上使用Codeblocks。
答案 0 :(得分:3)
我打赌那是因为ans
是long double
,但你没有告诉printf
期待long double
。假设是这种情况,你想要的格式代码是%.3Le
。
g ++编译器甚至有一个警告来检测格式/参数不匹配(我认为它附带-Wall
)但我总是喜欢iostream,因为它们是类型安全的。
所有这些当然假设p
也是long double
,导致编译器选择long double
pow
版本。