将连续数值压到整数等级时,每个位置独立舍入会丢掉各自的小数。另一种练习规则把当前未保留的误差带给下一个位置,局部结果可能改变,但累计误差有清楚的核对办法。
以下是一组可按记录复查的虚构游戏例子。它先固定输入、单位和执行顺序,再展示每一步结果。读者可以用纸笔挑出几步核对,不需要依赖具体游戏的后台数据。
明确规则与输入
输入是同一行的灰度数值,单位为四分之一,范围为二到八。独立模式每项四舍五入,恰好一半向上;带误差模式先加上一次残差,再按同样规则舍入,新残差为舍入前值减输出。初始残差为零,不做额外限幅。
十八个灰度值['31/4', '8', '15/4', '9/4', '5/2', '5', '25/4', '4', '19/4', '4', '2', '15/2', '4', '11/4', '15/2', '17/4', '11/4', '5/2']
完整计算过程
位置1输入31/4,独立舍入8;加上旧误差后为31/4,输出8、新残差-1/4。累计输入31/4,两种累计输出8与8。
位置2输入8,独立舍入8;加上旧误差后为31/4,输出8、新残差-1/4。累计输入63/4,两种累计输出16与16。
位置3输入15/4,独立舍入4;加上旧误差后为7/2,输出4、新残差-1/2。累计输入39/2,两种累计输出20与20。
位置4输入9/4,独立舍入2;加上旧误差后为7/4,输出2、新残差-1/4。累计输入87/4,两种累计输出22与22。
位置5输入5/2,独立舍入3;加上旧误差后为9/4,输出2、新残差1/4。累计输入97/4,两种累计输出25与24。
位置6输入5,独立舍入5;加上旧误差后为21/4,输出5、新残差1/4。累计输入117/4,两种累计输出30与29。
位置7输入25/4,独立舍入6;加上旧误差后为13/2,输出7、新残差-1/2。累计输入71/2,两种累计输出36与36。
位置8输入4,独立舍入4;加上旧误差后为7/2,输出4、新残差-1/2。累计输入79/2,两种累计输出40与40。
位置9输入19/4,独立舍入5;加上旧误差后为17/4,输出4、新残差1/4。累计输入177/4,两种累计输出45与44。
位置10输入4,独立舍入4;加上旧误差后为17/4,输出4、新残差1/4。累计输入193/4,两种累计输出49与48。
位置11输入2,独立舍入2;加上旧误差后为9/4,输出2、新残差1/4。累计输入201/4,两种累计输出51与50。
位置12输入15/2,独立舍入8;加上旧误差后为31/4,输出8、新残差-1/4。累计输入231/4,两种累计输出59与58。
位置13输入4,独立舍入4;加上旧误差后为15/4,输出4、新残差-1/4。累计输入247/4,两种累计输出63与62。
位置14输入11/4,独立舍入3;加上旧误差后为5/2,输出3、新残差-1/2。累计输入129/2,两种累计输出66与65。
位置15输入15/2,独立舍入8;加上旧误差后为7,输出7、新残差0。累计输入72,两种累计输出74与72。
位置16输入17/4,独立舍入4;加上旧误差后为17/4,输出4、新残差1/4。累计输入305/4,两种累计输出78与76。
位置17输入11/4,独立舍入3;加上旧误差后为3,输出3、新残差0。累计输入79,两种累计输出81与79。
位置18输入5/2,独立舍入3;加上旧误差后为5/2,输出3、新残差-1/2。累计输入163/2,两种累计输出84与82。
最终输入合计163/2,带误差输出合计82,两者差-1/2等于末尾残差。
独立核对与边界
每个前缀的输入总和减带误差输出总和,应恰好等于当前残差,残差范围为负二分之一到正二分之一但不含右端。这个恒等式能检查误差符号是否传反,以及是否遗漏某一项。
本例只演示单行数值传递,不宣称是完整图像压缩算法,也不处理颜色编码或二维扩散。相邻像素的局部差异可能增加,累计更接近并不保证观感在所有图片上都更好。
练习时只改变一个条件,先判断哪些中间步骤应当受影响,再重新计算。要把空状态、数值零和未能确定的结果分开。边界约定不同可能产生不同答案,复查的目标是确认输入、过程与规则一致,而不是只追求最后一个数字看起来相同。
