我刚试了三段代码:
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a);
printf("%d",b);
return 0;
}
//Output:1000
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a-1);
printf("%d",b);
return 0;
}
//Output:99
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a-2);
printf("%d",b);
return 0;
}
//Output:10
我想知道为什么第二个代码块会输出99,是不是因为浮点精度?或者是因为我应该在pow函数中使用浮点数?(例如10.0) 我常常对C ++的准确性感到困惑,我将非常感谢你的帮助。
答案 0 :(得分:0)
通过截断将浮点值转换为整数 - 您将获得接近零的下一个整数。如果pow
不精确且太低,那么截断会加剧它。
lround(pow(10,2))
可能更合适。
答案 1 :(得分:0)
对于整数指数,以下模板非常方便:
template <typename T> inline constexpr T pow( T base, int exponent )
{
return (exponent == 0) ? static_cast<T>(1.0) : ( (exponent>0) ? base*pow(base, exponent-1) : pow( static_cast<T>(1.0)/base, -exponent ) );
}
如果您计划在C ++ 11之前使用C ++标准,只需删除constexpr关键字。