zlib备忘
来源:互联网 发布:12306抢票软件 编辑:程序博客网 时间:2024/05/16 06:05
zlib中的adler32()函数用到宏NMAX , 该宏被定义为:
#define NMAX 5552
文件中给出的解释是
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
定义该宏的目的是保证宏DO1(buf,i)中的sum2 不发生累加溢出。
#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
具体分析如下:
1 sum2 是 32 bits 变量 应小于2^32。
2 sum2 的值是通过循环累加得到的。
sum2_new = sum2_old
+adler+buf[0]
+adler+buf[0]+buf[1]
~~~~~~~
+adler+buf[0]+buf[1]~~~+buf[NMAX]
<=sum2_old
+adler+0xff
+adler+0xff+0xff
~~~~~~~
+adler+0xff+0xff~~~+0xff
= sum2_old+NMAX*adler + 0xff*(1+2~~+NMAX)
3 adler<BASE, sunm2_old<BASE
4 sum2_new <= (NMAX+1)*(BASE-1)+ 0xff*(1+NMAX)*NMAX/2
因此
(NMAX+1)*(BASE-1)+ 0xff*(1+NMAX)*NMAX/2 <= 2^32-1
才可保证 sum2不溢出。
- zlib备忘
- zlib压缩库备忘
- zlib
- zlib
- zlib
- zlib
- zlib
- zlib
- ZLIB
- zlib
- zlib
- zlib
- zlib
- zlib
- 备忘
- 备忘
- 备忘
- 备忘
- 146条经典民间偏方曝光
- 使用失真门户可视化时变数据
- oracle数据文件为什么存在 Rfile# and file#
- 一个招聘要求!汗。。
- debian安装evaqq
- zlib备忘
- 使用ROWID查找和删除重复行
- 飞信虚拟机运行.net程序 使用Access的mdb数据库
- oracle rowid
- TCP/IP 应用程序的通信连接模式
- 阅读笔记: 软件质量特性
- 隐式链接和显示链接的区别
- oracle8的ROWID结构
- 终于开博