in reply to Generating A Hash Value
You will have overflow problems, I think. Likely you should only retain the $n (<=32?) lower bits of $acc. Your remark on "using int arithmetic" also points in that direction. So I'll modify that into:sub hashing { my $s = shift; my $acc = 0; foreach my $c (unpack 'C*', $s) { $acc *= 31; $acc += $c; } return $acc; }
sub hashing { my $s = shift; my $acc = 0; foreach my $c (unpack 'C*', $s) { $acc *= 31; $acc += $c; $acc %= 0x100000000; } return $acc; }
|
|---|