44 lines
736 B
Text
44 lines
736 B
Text
real
|
|
entropy(data b)
|
|
{
|
|
integer count, i;
|
|
real ones, zeros;
|
|
|
|
ones = zeros = 0;
|
|
|
|
i = -(count = ~b);
|
|
while (i) {
|
|
if (b[i] == '0') {
|
|
zeros += 1;
|
|
} else {
|
|
ones += 1;
|
|
}
|
|
|
|
i += 1;
|
|
}
|
|
|
|
return -(ones /= count) * log2(ones) - (zeros /= count) * log2(zeros);
|
|
}
|
|
|
|
integer
|
|
main(void)
|
|
{
|
|
data a, b;
|
|
integer i;
|
|
|
|
a = "1";
|
|
b = "0";
|
|
|
|
o_form("%2d %9d /w12p10d10/ ~\n", 1, ~a, 0r, a);
|
|
o_form("%2d %9d /w12p10d10/ ~\n", 2, ~b, 0r, b);
|
|
i = 3;
|
|
while (i <= 37) {
|
|
bu_copy(a, 0, b);
|
|
o_form("%2d %9d /w12p10d10/ ~\n", i, ~a, entropy(a),
|
|
i < 10 ? a.string : "");
|
|
i += 1;
|
|
b.swap(a);
|
|
}
|
|
|
|
return 0;
|
|
}
|