我正在编写一个程序来计算 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。
最佳答案
我打赌那是因为 ans
是一个 long double
,但是你没有告诉 printf
期待一个 long double
。您想要的格式代码是 %.3Le
假设是这种情况。
g++ 编译器甚至有检测格式/参数不匹配的警告(我认为它带有 -Wall
),但我总是更喜欢 iostream,因为它们像这样类型安全。
当然,所有这些都是假设 p
也是 long double
,导致编译器选择 的
。long double
版本战俘
关于c++ - cout 和 printf 的 pow 函数输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10509160/