前言:
今天兄弟们对“c语言 10的几次方”大概比较关怀,小伙伴们都想要知道一些“c语言 10的几次方”的相关资讯。那么小编同时在网上收集了一些关于“c语言 10的几次方””的相关文章,希望我们能喜欢,同学们一起来学习一下吧!数值的整数次方
数值是double类型,整数次方可能是负数0正数。
参考代码:
root@gt:/home/git/Code# ./a.out base:2.000000 exponent:10 res:1024.000000 exponent:-10 res=0.000977root@gt:/home/git/Code# cat pow.c #include <stdio.h>int g_invalidInput = 0;int equal(double base,double n){ int res = base - n; if(res < 0) res = -res; if(res < 0.000001) return 1; else return 0;}double PowerUnsigned(double base,unsigned int absExponent){ double res = 1.0; while(absExponent) { res *= base; --absExponent; } return res;}double Power(double base,int exponent){ if(equal(base,0.0) && exponent < 0) { g_invalidInput = 1; printf("invalid input\n"); return 0.0; } unsigned int absExponent = (unsigned int)exponent; if(exponent < 0) { absExponent = (unsigned int)(-exponent); } double res = PowerUnsigned(base,absExponent); if(exponent < 0) { res = 1.0/res; } return res;}int main(){ double base = 2.0; int exponent = 10; double res0 = Power(base,exponent); double res1 = Power(base,-exponent); printf("base:%lf\texponent:%d\tres:%lf\n\t\texponent:%d\tres=%lf\n",base,exponent,res0,-exponent,res1); return 0;}
扩展:
乘方算法可以优化:
double PowerUnsigned(double base,unsigned int absExponent){ double res = 1.0; while(absExponent) { res *= base; --absExponent; } return res;}
可以使用一点技巧,更快的计算乘方:
double PowerUnsigned(double base,unsigned int absExponent){ if(absExponent == 0) return 1; if(absExponent == 1) retuen base; double res = PowerUnsigned(base,absExponent >> 1); res *= res; if(absExponent & 0x1 == 1) res *= base;//奇数 return res;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言 10的几次方