2

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

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

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

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

我在 Ubuntu 上使用代码块。

4

1 回答 1

3

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

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

当然,所有这一切都是假设p也是long double,导致编译器long double选择pow.

于 2012-05-09T02:51:37.840 回答