jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : ジャグラー 設定信頼度
#!/usr/bin/perl
# ジャグラー 二項分布によるデータのみからの設定信頼度
$cginame = 'js.cgi';
$title = 'ジャグラー データからの設定信頼度';
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
foreach $str (split(/&/,$input)) {
($name,$value) = split(/=/, $str);
push(@input, $value);
}
($play, $big, $reg) = @input;
print "Content-Type: text/html\n\n";
# ヘッダとフォームの表示
print <<"__ HTML __";
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content="text/html; charset=shift_jis">
<title>jug7.com - cgi $title</title>
<style type="text/css"> <!--
A:hover {color:#ff0000;}
--></style>
</head>
<body text='#000000' bgcolor='#ffffff' link='#0000ff' alink='#ff0000' vlink='#0000cc'>
<hr>
<b>$title</b><br>
<form action='$cginame' method='POST'>
プレイ数 <input type='text' size=6 name='play' maxlength=4 value='$play'><br>
BIG <input type='text' size=3 name='big' maxlength=4 value='$big'><br>
REG <input type='text' size=3 name='reg' maxlength=4 value='$reg'><br><br>
<input type='submit' value="開始">
</form>
__ HTML __
# エラーチェックとGET送信
if ($ENV{'REQUEST_METHOD'} ne 'POST') {
print '<a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
exit;
}
if($play > 9999) {
print '<center><font size=4 color=\'red\'><b>ERROR ! (プレイ数制限)</b></font></center>';
print '<a href=\'../index.html\'>top へ戻る</a>',"\n",'</body></html>';
exit;
}
# jug data
$rand = 16384;
@big = (55, 60, 63, 67, 68, 68); # /16384
@reg = (25, 26, 27, 30, 35, 45);
#------------
# 計算開始
#------------
$big = 0 if !$big;
$reg = 0 if !$reg;
$bp = &point(($play/$big), 2) if $big;
$rp = &point(($play/$reg), 2) if $reg;
$br = $big + $reg;
$brp = &point(($play/$br), 2) if $br;
for ($x=0; $x<=5; $x++) {
$p1 = ($big[$x]/$rand)**$big * (1-$big[$x]/$rand)**($play-$big);
$p2 = ($reg[$x]/$rand)**$reg * (1-$reg[$x]/$rand)**($play-$reg);
$p3 = $p1 * $p2;
$t_bigp += $p1; push(@bigp,$p1);
$t_regp += $p2; push(@regp,$p2);
$t_brp += $p3; push(@brp, $p3);
}
# 百分率にする
for ($x=0; $x<=5; $x++) {
$per1 = &point(($bigp[$x]/$t_bigp*100),2) if $t_bigp;
$per2 = &point(($regp[$x]/$t_regp*100),2) if $t_regp;
$per3 = &point(($brp[$x]/ $t_brp*100), 2) if $t_brp;
push(@nb,$per1);
push(@nr,$per2);
push(@nbr,$per3);
}
# 結果の表示
print '<br>',"BR合成 (1/$brp)<br>",'BRからの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -> $nbr[$x-1] %<br>\n"; }
print '<br>',"BIG $big 回 (1/$bp)<br>",'BIG からの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -> $nb[$x-1] %<br>\n"; }
print '<br>',"REG $reg 回 (1/$rp)<br>",'REG からの設定信頼度<br>';
for ($x=1; $x<=6; $x++) { print "設 $x -> $nr[$x-1] %<br>\n"; }
print '<br><br><a href=\'../index.html\'>top へ戻る</a><hr></body></html>';
exit;
# 少数を四捨五入して指定の桁にする
sub point {
my($value, $fig, $x);
($value, $fig) = @_;
$value = int($value * (10 ** $fig) + 0.5) / (10 ** $fig);
if ($value =~ /(\d+)\.(\d+)/) { $x = $2; }
elsif ($value !~ /\./) { $x =''; $value .= '.'; }
$value = $value.'0' x ( $fig - length($x) );
return $value;
}
[ home / cgi / juggler / column / diary / bbs / link / welcome ]