快速的 log2的算法。
2013-11-08 00:03
597 查看
用coco2d 的时候,看到读取ccbi文件。顺便研究了下。这个是mac 下 cocosbuilder 编辑完成以后发布的 2进制文件,windows 下没有工具打开。就稍微研究了一下格式,这东西里面坑真不少。以后研究透彻了在写博客记录下。
目前发现一个坑就是这里面的 INT 和UINT 值是用的 Elias gamma coding 具体可以看看 http://en.wikipedia.org/wiki/Elias_gamma_coding 这里。还有 http://blog.csdn.net/sonikk/article/details/8716529 特意研究的是CCBI中的
Elias gamma coding 算法。这篇文章里,作者用到了计算log2,他是用c的库函数的。想起很久一起那看到过的 快速的log2 的算法。查了一下资料,查了一下,就是把一个整数转换成浮点数,以float 为例,就是一个符号位,标记正负,8个指数为,还有剩下23个位数位。双精度的浮点数 double 也是如此,只是位数不同。具体可以看一下IEEE的浮点数标准。所以 整个log2的思路,就是把整数转换成浮点数,然后把指数为取出来,然后在计算一下指数为里有几个值就可以了。 英文网址 http://stereopsis.com/log2.html 这里
贴一下代码
目前发现一个坑就是这里面的 INT 和UINT 值是用的 Elias gamma coding 具体可以看看 http://en.wikipedia.org/wiki/Elias_gamma_coding 这里。还有 http://blog.csdn.net/sonikk/article/details/8716529 特意研究的是CCBI中的
Elias gamma coding 算法。这篇文章里,作者用到了计算log2,他是用c的库函数的。想起很久一起那看到过的 快速的log2 的算法。查了一下资料,查了一下,就是把一个整数转换成浮点数,以float 为例,就是一个符号位,标记正负,8个指数为,还有剩下23个位数位。双精度的浮点数 double 也是如此,只是位数不同。具体可以看一下IEEE的浮点数标准。所以 整个log2的思路,就是把整数转换成浮点数,然后把指数为取出来,然后在计算一下指数为里有几个值就可以了。 英文网址 http://stereopsis.com/log2.html 这里
贴一下代码
#include <iostream> #include <sstream> using namespace std; namespace utility { //- 工具函数, template <typename PODType> int to_int(PODType value) { int ret; std::stringstream _stream; _stream <<value; _stream >>ret; return ret; } }; //-快速log2 的算法 int fast_log2(int _val) { int ret; float fdata = (float)_val; //unsigned int uData = (fdata>>23)&0xFF; //直接移动出错 unsigned int data = (unsigned int&)fdata;//(unsigned int&)fdata 与*(unsigned int*)&fdata; 一致 unsigned int udata = (data>>23)&0xFF; ret = (int)udata -127;//-无符号到有符号 return ret; } int main(int argc,char** argv) { int data = utility::to_int(argv[1]); int log2_data = fast_log2(data); cout <<"data: " << data <<" log2_data: "<< log2_data <<endl; system("pause"); return 0; }
相关文章推荐
- 求log2(n)的整数部分的快速算法
- 白话经典算法系列之六 快速排序 快速搞定
- 快速重传与快速恢复算法
- 算法:快速排序
- 坐在马桶上看算法:快速排序
- 快速求幂算法
- 白话经典算法系列之六 快速排序 快速搞定
- 【重温经典算法之二】快速排序
- 程序员如何快速准备面试中的算法
- 算法 1.4.15 快速3-sum
- 程序员如何快速准备面试中的算法
- 啊哈算法-----快速排序
- 快速压缩跟踪(fast compressive tracking)CT算法剖析
- 快速查找字符串中首个重复字母算法
- 排序算法之快速排序
- 最快速的开平方算法
- 快速指数算法 和 求逆元算法
- 排序算法之快速排序
- 为什么算法容易忘记之快速排序
- 经典算法之快速排序