首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算快速对数底2上限

计算快速对数底2上限
EN

Stack Overflow用户
提问于 2010-07-18 00:59:06
回答 15查看 35K关注 0票数 41

在输入和输出都是64位整数的情况下,计算(long int) ceiling(log_2(i))的快速方法是什么?有符号或无符号整数的解决方案是可接受的。我怀疑最好的方法是使用类似于here的方法,而不是尝试我自己的方法,而不是使用已经经过良好测试的方法。一个通用的解决方案将适用于所有正值。

例如,2,3,4,5,6,7,8的值是1,2,2,3,3,3,3

编辑:到目前为止,最好的方法似乎是使用任何数量的快速现有bithack或寄存器方法来计算整数/底对数2(MSB的位置),然后在输入不是2的幂的情况下添加1。对2的幂的快速逐位检查是(n&(n-1))

编辑2:关于整数对数和前导零方法的一个很好的来源是Henry S.Warren在Hacker's Delight中的5-3和11-4节。这是我发现的最彻底的治疗方法。

编辑3:这项技术看起来很有前途:https://stackoverflow.com/a/51351885/365478

EN

Stack Overflow用户

发布于 2010-07-18 01:29:46

如果您有80位或128位浮点数可用,则转换为该类型,然后读出指数位。此链接包含详细信息(最多52位整数)和其他几种方法:

http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogIEEE64Float

另外,检查ffmpeg源代码。我知道他们有一个非常快的算法。即使它不能直接扩展到更大的尺寸,您也可以轻松地执行if (x>INT32_MAX) return fastlog2(x>>32)+32; else return fastlog2(x);之类的操作

票数 2
EN
查看全部 15 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3272424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档