快速的 log2的算法。
来源:互联网 发布:c 并发编程实践 pdf 编辑:程序博客网 时间:2024/06/11 05:35
用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 这里
贴一下代码
#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的算法。
- 一个求log2的函数
- 快速计算log2()
- 快速log2整数计算
- 快速log2整数计算
- C 里 求 log2 N 的问题
- POJ 2661 Factstone Benchmark (log2的故事)
- chrome的base库中求最接近n的2的多少次幂,也就是k=log2(n); 求k的算法
- 折半查找的时间复杂度log2(n)的推导
- log2
- log2
- log2
- 关于Java中 求Logn/log2 的精度问题。
- log10/log2--求常用对数/以2为底的对数
- 求以log2为底的对数值
- 简单快速的算法
- 常见的快速算法
- 1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。
- DataDroid 刚开始接触和学习 一
- Quartz 2D编程指南(13) - PDF文档的创建、显示及转换
- OpenWRT编译报找不到 sys/soundcard.h 的解决方法
- delphi笔记1
- ASP验证码的生成
- 快速的 log2的算法。
- django handbook in chinese
- std::locale::global 的问题
- python自然语言处理工具NLTK各个包的意思和作用总结
- 系统的融合变化感想
- SQL Server数据库表锁定原理以及如何解除表的锁定 -1
- Android基础学习 - 发送短信:
- oracle 日志挖掘
- sql server 锁机制