如何在不使用 C# 中内置数学函数的情况下计算以 2 为底的对数?
我在应用程序中重复使用 Math.Log 和 BigInteger.Log 数百万次,并且速度变得非常慢。
我对使用二进制操作来实现相同目的的替代方案感兴趣。请记住,我可以使用对数近似来帮助加快执行时间。
假设您只对对数的积分部分感兴趣,您可以这样做:
static int LogBase2(uint value)
{
int log = 31;
while (log >= 0)
{
uint mask = (1 << log);
if ((mask & value) != 0)
return (uint)log;
log--;
}
return -1;
}
(请注意,0 的返回值是错误的;它应该是负无穷大,但整型数据类型没有这样的值,所以我返回 -1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)