2012-05-09 44 views
2

我在写一个程序来计算的2 我用下面的两段代码负数幂:pow函数为cout和printf输出不同的输出?

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。

+4

我们可以看到'ans'的变量声明吗?如果它不是'double'类型,那么你可能会将错误类型的参数传递给'printf'。 – templatetypedef

回答

3

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

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

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

+0

ans是一个长双。马克B,你是对的!我将参数更改为%.3Le,现在它工作得很好。谢谢你的帮助。 – varagrawal