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
作为答案?
答案 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
对整数类型有重载,这在整数运算中很有用。