さっきの追記

やっぱり変数を左右分に分ける必要性があんまりなかったみたい。

あったとしたらこれだけ。

int l=0, r=0, m=0;

先生に聞くと、これであってるっぽい。

エクセルで差分をグラフに描くと、y軸が元の1/10になってることから、差分のエントロピーは元のエントロピーより1/10小さいと考えられるそうな。

そうすると、1/8≦1/10≦1/16だから、大体3ビットちょっと小さくなってるんじゃないかなと言ってた。

で、さっきは全体のエントロピー求めたから、今度は差分だ。

for(count=0; count!=samples_to_output; count++){
	for(i=0; i<channels; i++){
		if(bits<=8){
			if((x=fgetc(f)) == EOF) goto loopend;
			x -= 128;
		}else{
			if(fread(s, 2, 1, f) != 1) goto loopend;
			x = (short)(s[0] + 256 * s[1]);
		}
		if(i!=channels - 1) m = l;
		if(i==channels - 1) m = r;
		//printf("%d", x-m);
		//if(i!=channels - 1) printf("	");
		histo[x+32768]++;
		hists[(x-m)+32768]++;
		if(i!=channels - 1){
			l = x;
		}
		if(i==channels - 1){
			r = x;
		}
		total++;
	}
	//printf("\n");
}

以前のこの部分を、上のやつに変更。

これでいいっぽい。

で、結果が

all  : 12.3109
diff : 8.92482

になる。

うん、大体3ビットちょっと減ってるな。