c++ - cout 和 printf 的 pow 函数输出不同?

标签 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 = -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/

相关文章:

c++ - 您可以指定线程终止的顺序,即线程依赖性吗?

c++ - 临界区段错误 - 避免死锁

c++ - 显然相同的数学表达式具有不同的输出

C++ 浮点到整数类型的转换

swift - 无法将类型 'Float' 的值转换为预期的参数类型 'Binding<Float>' 错误 Swift 5.2

c++ - 在 QHash<QString, DataType> 中搜索 QStringView 而不分配内存?

C++ 将二进制(64 位)转换为十进制

c - 警告 :0 flag ignored with precision and '%x' gnu_printf format

c - 没有'\n'的printf()在libev中不起作用

c - 我不理解这段c代码的几个方面