大家好,欢迎来到IT知识分享网。
C++中提供了各种功能的数学函数,比如三角函数、反三角函数、指数、对数、开方等等,那么这些函数到底是如何实现的呢,同一个函数又有哪些实现方法呢?
计划接下来一段时间将以此为主题,将常用的数学函数用C++重新实现一遍。
今天的主题是log以2为底的对数函数如何实现?
自然C++的库函数里有log2、log、log10等函数可以直接使用,但我们想尝试下自己实现现一个log2函数?
经过摸索,实现了两个方法,实现如下:
方法一:比较简单
int lg[100]; lg[1] = 0; for(int i = 2; i <= 100; ++i) lg[i] = lg[i >> 1] + 1;
这里利用2^0=1,而所有其他数字都可以除以2之后加1计算其对数。
方法二:取一个正整数的二进制的最高位1的所在位置即可
int getLg(int x) { int ans = 0; if(x & 0xffff0000) {ans += 16; x &= 0xffff0000;} if(x & 0xff00ff00) {ans += 8; x &= 0xff00ff00;} if(x & 0xf0f0f0f0) {ans += 4; x &= 0xf0f0f0f0;} if(x & 0xcccccccc) {ans += 2; x &= 0xcccccccc;} if(x & 0xaaaaaaaa) {ans += 1; x &= 0xaaaaaaaa;} return ans; }
使用时通过 cout << getLg(n)即可调用
仅供参考,欢迎留言
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/168610.html