From 635b2ad075fa0c2d11f57f817e944abfbcf442ed Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 18 Apr 2012 02:12:21 +0200 Subject: [PATCH] Better combination formula --- combine.pl | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/combine.pl b/combine.pl index 60112ac..6493724 100644 --- a/combine.pl +++ b/combine.pl @@ -5,29 +5,41 @@ use strict; sub loadFile { my ($file) = @_; my %ret; - my $min = 100000000; + my $max = 0; open FILE,$file; while () { my ($addr,$p2h,$p8h,$p1d,$p1w,$p1m) = split(/\s+/,$_); if ($p1m =~ /\A([1-9.]+)%\Z/) { - my $x = log($1*0.01)/log(0.5); - $min=$x if ($x < $min); + my $x = $1*0.01; + $max=$x if ($x > $max); $ret{$addr} = $x; } } for my $k (keys %ret) { - $ret{$k} -= $min; + $ret{$k} /= $max; } close FILE; return \%ret; } +sub merge { + my ($a,$b) = @_; + return 1-(1-$a)*(1-$b); +} + sub combine { my ($f1,$f2) = @_; my %ret; for my $k1 (keys %{$f1}) { if (defined $f2->{$k1}) { - $ret{$k1} = $f1->{$k1} + $f2->{$k1}; + $ret{$k1} = merge($f1->{$k1}, $f2->{$k1}); + } else { + $ret{$k1} = merge($f1->{$k1}, 0); + } + } + for my $k2 (keys %{$f2}) { + if (!defined $f1->{$k2}) { + $ret{$k2} = merge(0, $f2->{$k2}); } } return \%ret; @@ -45,9 +57,9 @@ for my $file (@ARGV) { $n++; } -for my $addr (sort { $res->{$a} <=> $res->{$b} } (keys %{$res})) { +for my $addr (sort { $res->{$b} <=> $res->{$a} } (keys %{$res})) { if ($addr =~ /\A(\d+)\.(\d+)\.(\d+)\.(\d+):8333/) { my $a = $1*0x1000000 + $2*0x10000 + $3*0x100 + $4; - printf "0x%08x %s %g%%\n",$a,$addr,exp(log(0.5)*$res->{$addr}/$n)*100; + printf "0x%08x %s %g%%\n",$a,$addr,(1-((1-$res->{$addr}) ** (1/$n)))*100; } }