【发布时间】:2020-02-02 02:22:53
【问题描述】:
我正在尝试编写一个不使用 pow() 函数来计算功率的循环。我被困在如何做到这一点上。执行base *= base 甚至适用于高达 4 的幂,所以有一些我似乎无法弄清楚的完全奇怪的东西。
int Fast_Power(int base, int exp){
int i = 2;
int result;
if(exp == 0){
result = 1;
}
if(exp == 1){
result = base;
}
else{
for(i = 2; i < exp; i++){
base *= base;
result = base;
}
}
return result;
}
【问题讨论】:
-
result = base; if (!exp) return 1; for(i = 1; i < exp; i++) result *= base; return result;-- 但您需要检查整数溢出。即使是相对较小的指数也可能导致大整数溢出... -
"Doing base *= base works for even power up to 4" -->
base使用了什么值? -
@chux,四的幂是巧合,以
3^4为例。你想要3*3*3*3 = 81,但你从3开始得到base,然后平方两次(对于2和3的i),得到9然后是81。2的幂实际上导致未初始化的结果。跨度> -
您不允许
int可以表示的值范围是有限的。该标准不保证int可以表示超过32767,因此如果base的值超过13,如果提高到4的幂,可能会导致溢出。即使对于 32 位int,如果将大于215的值提高到4的幂,也会发生溢出。当int发生溢出时,行为未定义。
标签: c++ function loops exponent