pow的工作方式不同,详细解释一下?

时间:2017-04-11 19:49:20

标签: c++

int a=pow(100,2);//line 1
int b=ceil(pow(100,2));//line 2
cout<<pow(100,2);//line 3

第1行在a=9999

的值上打印a

第2行在b=10000

的打印值上给出b

第3行打印10000

我知道pow给予值9999.9999所以ceil func。第2行给出了它的上限值。

但为什么没有打印9999.9999

任何人都可以解释为什么pow表现得像这样的返回小数值pow只是一个幂函数为什么它只是简单地给100*100作为答案?

2 个答案:

答案 0 :(得分:3)

cout语句中,pow(100, 2)确实是双精度值,略低于10000(通过pow函数的众所周知的效果),但cout的默认精度设置会导致舍入并输出为整数。

答案 1 :(得分:1)

原因是pow将两个double值作为参数(并返回double),并且通常会实现pow(x, y)exp(y log x) 。即使是看似微不足道的输入值,这也会“熄灭”。见Is floating point math broken?

请注意std::pow对整数类型有重载,这在整数运算中很有用。