jug7.com
[ home / cgi / juggler / column / diary / bbs / link / welcome ]
source : BIG 平均獲得枚数の計算
#!/usr/bin/perl
# BIG平均獲得枚数を計算
$cginame = 'big_get.cgi';
$title = 'BIG平均獲得枚数の計算';
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read (STDIN, $input, $ENV{'CONTENT_LENGTH'});
}
foreach $str (split(/&/,$input)) {
($name,$value) = split(/=/, $str);
push(@input, $value);
}
($coin1, $kaku1, $coin2, $kaku2, $coin3, $kaku3, $coin4, $kaku4, $coin5, $kaku5,
$jcoin, $jkaku, $rs, $reg,$rjun, $rkai,$rkai2, $jh, $big, $play, $jkai, $rand) = @input;
# radio によって $rs と $reg が入れ替わるので対処
if ($reg == 2) { $hoge = $reg; $reg = $rs; $rs = $hoge; }
print "Content-Type: text/html\n\n";
$reg = 112 if !$reg;
$big = 15 if $big eq '';
$rjun = 14 if !$rjun;
$rkai = 8 if !$rkai;
$rkai2 = 12 if !$rkai2;
$play = 30 if !$play;
$rs = 1 if !$rs;
$jkai = 3 if !$jkai;
$rand = 1 if !$rand;
# HTML の radio ボタンにチェックを入れる
$rs_chk[$rs] = 'checked';
$jkai_chk[$jkai] = 'checked';
$rand_chk[$rand] = 'checked';
# ヘッダとフォームの表示
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'>
<font size=7><b><font face='Times New Roman,Times'>jug</font><font face='Bookman Old Style,arial black,Helvetica Black'>7</font><font face='Times New Roman,Times'>.com</font></b></font>
<hr color='#00aa00'>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
<div align='center'><h2>$title</h2></div>
<hr width='70%'>
<div align='right'>[ <a href='big_get_memo.html'>memo</a> / <a href='big_get.html'>source</a> ]</div>
<br><br><center>
<form action='$cginame' method='POST'>
<table border=0><tr valign='top'><td>
<table border=1 align='center' cellspacing=0 bgcolor='#ffffcc'>
<caption><font size=2>小役ゲーム</font></caption>
<tr align='center'><td> </td><td><font size=2>払い出し<br>枚数</font></td><td><font size=2>確率</font></td></tr>
<tr><td><font size=2>小役 1</font></td><td><input type='text' size=3 name='coin1' value="$coin1"> <font size=2>枚</td>
<td>1/ <input type='text' size=10 name='kaku1' value="$kaku1"></td></tr>
<tr><td><font size=2>小役 2</font></td><td><input type='text' size=3 name='coin2' value="$coin2"> <font size=2>枚</td>
<td>1/ <input type='text' size=10 name='kaku2' value="$kaku2"></td></tr>
<tr><td><font size=2>小役 3</font></td><td><input type='text' size=3 name='coin3' value="$coin3"> <font size=2>枚</td>
<td>1/ <input type='text' size=10 name='kaku3' value="$kaku3"></td></tr>
<tr><td><font size=2>小役 4</font></td><td><input type='text' size=3 name='coin4' value="$coin4"> <font size=2>枚</td>
<td>1/ <input type='text' size=10 name='kaku4' value="$kaku4"></td></tr>
<tr><td><font size=2>小役 5</font></td><td><input type='text' size=3 name='coin5' value="$coin5"> <font size=2>枚</td>
<td>1/ <input type='text' size=10 name='kaku5' value="$kaku5"></td></tr>
<tr><td><font size=2><font color='blue'>JACIN</font></td><td><input type='text' size=3 name='jcoin' value="$jcoin">
<font size=2>枚</td><td>1/ <input type='text' size=10 name='jkaku' value="$jkaku"></td></tr>
</table>
</td><td>
<table border=1 cellspacing=0 bgcolor='#ffffcc'>
<caption><font size=2>JACゲーム、他</font></caption>
<tr><td><font size=2>REG枚数</font></td><td><input type='radio' name="rs" value=1 $rs_chk[1]>
<input type='text' size=4 name='reg' value="$reg"> <font size=2>枚<br><br><center>または</center><br>
<input type='radio' name='rs' value=2 $rs_chk[2]> <font color='#ffffff'>_____</font>純増
<input type='text' size=3 name='rjun' value="$rjun">枚 × <input type='text' size=3 name='rkai' value="$rkai"><font size=2>回行うか、
<div align='right'>JACゲーム最大 <input type='text' size=3 name='rkai2' value="$rkai2"> 回で終了。
<br><br>JACハズレ確率</font> 1/ <input type='text' size=10 name='jh' value="$jh"></div></td></tr>
<tr><td><font size=2>BIG 時<br>払い出し</font></td>
<td><input type='text' size=3 name='big' value="$big"> <font size=2>枚</font></td></tr>
<tr><td><font size=2>小役P</font></td><td><font size=2>最大
<input type='text' size=3 maxlength=2 name='play' value="$play"> プレイ</font></td></tr>
<tr><td><font size=2>JACIN</font></td><td><font size=2><input type='radio' name='jkai' value=3 $jkai_chk[3]> 3回
<input type='radio' name='jkai' value=2 $jkai_chk[2]> 2回
<input type='radio' name='jkai' value=1 $jkai_chk[1]> 1回 まで</font></td></tr>
<tr><td><font size=2>使用する<br>乱数</font></td>
<td><font size=2><input type='radio' name='rand' value=1 $rand_chk[1]> 16384
<input type='radio' name='rand' value=2 $rand_chk[2]> 65536</td></tr>
</table>
</td></tr></table><br>
<input type='submit' value="計算開始">
<br><br>
入力は半角文字で。記入のない欄は考慮されません。<br>
REG 枚数に JACIN 時の払い出しは含みません。どちらかのボタンを選択してください。
<br><br>
</form></center>
__ HTML __
# エラーチェック と GETでの送信
if ($play>30) { $error=1; $er_msg='小役ゲームは最大30Pまでです。'; }
if (grep { /[^\d\.]/ } @input) { $error = 1; $er_msg = '不適切な文字が記入されています。'; };
if (!(grep { $_ } ($kaku1, $kaku2, $kaku3, $kaku4, $kaku5, $jkaku) )[0]) { $error = 1; $er_msg = '確率がひとつも記入されていません。'; };
if ($ENV{'REQUEST_METHOD'} ne 'POST') { $error = 1; $er_msg = 0; }
if ($er_msg) {
print q{<center><b><font color='red' size=4>*** ERROR !! ***</font><br><br>},"\n";
print "$er_msg</b></center>\n";
}
if ($error) {
print '<br><br><br><br><br>';
print q{<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>};
print q{<div align='right'>[ <a href='big_get_memo.html'>memo</a> / <a href='big_get.html'>source</a> ]</div>};
print '</body></html>';
exit;
}
#--------------
# 計算開始
#--------------
### JAC game で得られるコインを計算 : $jac_game
# $rjun 純増枚数, $rkai 通常8回, $rkai2 最大12回, $jh ジャックハズレ確率
# $reg_exp[$i] : $i には、ジャックロストした回数が入る。
# @reg_exp : 期待枚数= (組み合わせ) * (jac_haz確率 ^ jac_haz回数) * (jac_in確率 ^ jac_in回数) * (増加コイン)
# サブルーチン combi は組み合わせを求める。 &combi(5,2) → 5!/3!2! = (5*4*3*2*1)/(3*2*1*2*1);
if ($rs == 1) { $jac_game = $reg; }
elsif ($rs == 2) {
$jachaz_p = ($jh) ? 1/$jh : 0;
$jacin_p = ($jh) ? 1 - $jachaz_p : 1;
for ($i=0; $i<=$rkai2; $i++) { # $i はジャックロストした回数
if ($i <= ($rkai2 - $rkai)) { # ジャックパンクなし
$combi = &combi(($i+$rkai-1), $i);
$reg_exp[$i] = $combi * $jachaz_p**$i * $jacin_p**$rkai * ($rjun*$rkai-$i);
} elsif ($i > ($rkai2-$rkai)) { # ジャックパンクあり
$combi = &combi($rkai2, $i);
$reg_exp[$i] = $combi * $jachaz_p**$i * $jacin_p**($rkai2-$i) * ($rjun*($rkai2-$i)-$i);
}
$jac_game += $reg_exp[$i];
}
}
$total_jac = ($jcoin-3) + $jac_game; # JACINした時の払出し枚数 + JAC game で得られるコイン
# 乱数の数を計算 ( 総数は $rand )
$rand = ($rand==1) ? 16384 : 65536;
$r1 = ($kaku1) ? int($rand/$kaku1+0.5) : 0;
$r2 = ($kaku2) ? int($rand/$kaku2+0.5) : 0;
$r3 = ($kaku3) ? int($rand/$kaku3+0.5) : 0;
$r4 = ($kaku4) ? int($rand/$kaku4+0.5) : 0;
$r5 = ($kaku5) ? int($rand/$kaku5+0.5) : 0;
$r6 = ($jkaku) ? int($rand/$jkaku+0.5) : 0;
$r_haz = $rand - ($r1+$r2+$r3+$r4+$r5+$r6); # 小役ゲーム中のハズレの乱数
$r_nojac = $rand - $r6; # JACIN を除いたトータル乱数
# JACINを除いた小役ゲーム1Pでの期待値
$exp_nojac = $r1/$r_nojac*($coin1-3) + $r2/$r_nojac*($coin2-3) + $r3/$r_nojac*($coin3-3)
+ $r4/$r_nojac*($coin4-3) + $r5/$r_nojac*($coin5-3) + $r_haz/$r_nojac *(-3);
### ハズシをどこまで引っ張れば最高獲得枚数になるかを計算 ( 順押し優先とする $jun を求める )
# 残り1Pの場合、レバーを叩く前の期待枚数
$ex[0] = $r6/$rand*($total_jac) + (1-$r6/$rand)*$exp_nojac;
for ($i=1; $i<=29; $i++) {
$ex[$i] = $r6/$rand*($total_jac) + (1-($r6/$rand)) * ($exp_nojac + $ex[$i-1]);
}
# 順押し優先にするプレイ数を計算 $jun
for ($i=0; $i<=29; $i++) {
if (($total_jac+3) < $ex[$i]) { $jun = $i+1; last; }
}
if (!$jun) {
$hazushi_no = 1; # ハズシはしないほうが良い。
$jun = ($jkai==3) ? 28 : ($jkai==2) ? 29 : 30;
}
$hazushi_no = 1 if ($jun==28 && $jkai==3) or ($jun==29 && $jkai==2) or ($jun==30 && $jkai==1);
###### ハズシを使用した時の獲得枚数の計算
if (!$hazushi_no) {
### ($play-$jun) ( 順押し優先に戻す前まで)P 中にJACINを $i 回引く確率: $prob[$i] を求める
# 独立試行の定理の計算式より確率を求める。( JACIN確率 → $r6/$rand )
for ($i=0; $i<=($play-$jun); $i++) {
$combi = &combi(($play-$jun), $i);
$prob[$i]= $combi * ($r6/$rand)**$i * (1-$r6/$rand)**($play-$jun-$i);
}
### ($play-$jun) (順押し優先に戻す前まで) P中にJACINを $i 回引いた場合の期待獲得枚数 : $exp[$i] を求める
if ($jkai==1) { # JACゲーム1回までの機種
for ($i=0; $i<=($play-$jun); $i++) { # JACIN を引いたら必ずハズシを行う
$exp[$i] = $exp_nojac * ($play-$jun-$i) + ($i*(-3));
}
} elsif ($jkai==2) { # JACゲーム2回までの機種
$exp[0] = $exp_nojac * ($play-$jun); # JACIN 0 回
$exp[1] = $total_jac + $exp_nojac * ($play-$jun-1); # JACIN 1回のみ (JACINさせる)
for ($i=2; $i<=($play-$jun); $i++) {
$exp[$i] = $total_jac + $exp_nojac * ($play-$jun-$i) + ($i-1)*(-3); # JACIN 2回以上(1回だけJACINさせる)
}
} elsif ($jkai==3) { # JACゲーム3回までの機種
$exp[0] = $exp_nojac * ($play-$jun); # JACIN 0 回
$exp[1] = $total_jac + $exp_nojac * ($play-$jun-1); # JACIN 1 回 (JACINさせる)
$exp[2] = $total_jac*2 + $exp_nojac * ($play-$jun-2); # JACIN 2 回 (2回ともJACINさせる)
for ($i=3; $i<=($play-$jun); $i++) {
$exp[$i] = $total_jac*2 + $exp_nojac * ($play-$jun-$i) + ($i-2)*(-3); # JACIN 3 回以上 (2回だけJACINさせる)
}
}
### 順押し優先にしてからの 期待値 = 確率 * 獲得枚数 を求める
# (x:その1) 順押しに戻した時、すでに ($jkai-1) 回以上JACINを引いてる場合 ( $jkai:最大JACゲーム回数。1〜3回 )
# 順押しに戻してから ($i+1)P目にJACINを引く確率( $i=$jun はJACINを引けない確率 = パンク )
for ($i=0; $i<=$jun-1; $i++) {
$x_p[$i] = ($r_nojac/$rand)**$i * ($r6/$rand); # $r_nojac は はJACIN 以外の乱数
}
$x_p[$jun] = ($r_nojac/$rand)**$jun; # パンク
# 順押しに戻してから($i+1)P目にJACINを引いた時の獲得枚数
for ($i=0; $i<=$jun-1; $i++) {
$x_get[$i] = $total_jac + $exp_nojac*$i;
}
$x_get[$jun] = $exp_nojac * $i; # パンク
# 期待値 ( 確率 * 獲得枚数 ) の和 : $x_exp
for ($i=0; $i<=$jun; $i++) {
$x_exp += $x_p[$i] * $x_get[$i];
}
# (y:その2) 順押しに戻した時、まだ ($jkai-2) 回しかJACINを引いてない場合 ( あとJACIN 2回 させると完走 )
if ($jkai>1) { # jkai==1 ならここを無視
# この後 JACIN を引けない。(1パン)
$y1_p = ($r_nojac/$rand)**$jun;
$y1_get = $exp_nojac * $jun;
# この後JACINを1回のみ引く。(2パン)
$y2_p = $jun * ($r_nojac/$rand)**($jun-1) * ($r6/$rand); # $jun 個から 1個だけ選ぶ組み合わせは $jun (通り)
$y2_get = $total_jac + $exp_nojac * ($jun-1);
# この後JACINを2回引く。(完走)( 2回目のJACINを $i+1 P 目に引く )
$y3_p[0] = $y3_get[0] = 0; # 2回目のJACINを1P目に引くのは無理
# $i+1 P 目に2回目のJACINを引く場合、2回目のJACINの位置は固定。組み合わせは $i個から1個 選ぶ組み合わせ = $i
for ($i=1; $i<=$jun-1; $i++) {
$y3_p[$i] = $i * ($r6/$rand)**2 * ($r_nojac/$rand)**($i-1);
$y3_get[$i] = $total_jac * 2 + $exp_nojac * ($i-1);
}
# 期待値
$y_exp = $y1_p * $y1_get + $y2_p * $y2_get;
for ($i=1; $i<=$jun-1; $i++) {
$y_exp += $y3_p[$i] * $y3_get[$i];
}
}
# (z:その3) 順押しに戻した時、まだ ($jkai-3)回しかJACINを引いていない場合 ( あとJACIN 3回 させると完走 )
if ($jkai==3) { # $jkai==1 or $jkai==2 ならここを無視
# この後 JACIN を引けない。(0パン)
$z1_p = ($r_nojac/$rand)**$jun;
$z1_get = $exp_nojac * $jun;
## この後JACINを1回のみ引く。(1パン)
$z2_p = $jun * ($r_nojac/$rand)**($jun-1) * ($r6/$rand);
$z2_get = $total_jac + $exp_nojac * ($jun-1);
## この後JACINを2回引く。(2パン)
$z3_p = &combi($jun, 2) * ($r6/$rand)**2 * ($r_nojac/$rand)**($jun-2);
$z3_get = $total_jac * 2 + $exp_nojac * ($jun-2);
## この後JACINを3回引く。(完走)( 3 回目のJACINを $i+1 P 目に引く )
for ($i=2; $i<=$jun-1; $i++) {
$combi = &combi($i, ($i-2));
$z4_p[$i] = $combi * ($r6/$rand)**3 * ($r_nojac/$rand)**($i-2);
$z4_get[$i] = $total_jac * 3 + $exp_nojac * ($i-2);
}
# 期待値
$z_exp = $z1_p * $z1_get + $z2_p * $z2_get + $z3_p * $z3_get;
for ($i=2; $i<=$jun-1; $i++) {
$z_exp += $z4_p[$i] * $z4_get[$i];
}
}
} # ハズシ使用時の計算終了。
# 小役狙い(ハズシなし)の獲得枚数
if ($jkai==1) { # JACIN 1回までの機種
## JACIN を引けない。(0パン)
$j1_p = ($r_nojac/$rand)**$play;
$j1_get = $exp_nojac * $play;
## JACINを1回引く。(完走)
for ($i=0; $i<=$play-1; $i++) { # ($i+1) P 目にJACINを引く。組み合わせは1通りのみ。
$j2_p[$i] = ($r6/$rand)**1 * ($r_nojac/$rand)**$i;
$j2_get[$i] = $total_jac + $exp_nojac * $i;
}
$j_ex = $j1_p * $j1_get;
for ($i=0; $i<=$play-1; $i++) {
$j_ex += $j2_p[$i] * $j2_get[$i];
}
} elsif ($jkai==2) { # JACIN 2回までの機種
## JACIN を引けない。(0パン)
$j1_p = ($r_nojac/$rand)**$play;
$j1_get = $exp_nojac * $play;
## JACINを1回のみ引く。(1パン)
$j2_p = $play * ($r_nojac/$rand)**($play-1) * ($r6/$rand); # $play個から1個だけ選ぶ組み合わせは $play (通り)
$j2_get = $total_jac + $exp_nojac * ($play-1);
## JACINを2回引く。(完走)
$j3_p[0] = $j3_get[0] = 0;
for ($i=1; $i<=$play-1; $i++) { # ($i+1)P 目に 2回目のJACIN。組み合わせは $i (通り)
$j3_p[$i] = $i * ($r6/$rand)**2 * ($r_nojac/$rand)**($i-1);
$j3_get[$i] = $total_jac * 2 + $exp_nojac * ($i-1);
}
$j_ex = $j1_p * $j1_get + $j2_p * $j2_get;
for ($i=1; $i<=$play-1; $i++) {
$j_ex += $j3_p[$i] * $j3_get[$i];
}
} elsif ($jkai==3) { # JACIN 3回までの機種
## JACIN を引けない。(0パン)
$j1_p = ($r_nojac/$rand)**$play;
$j1_get = $exp_nojac * $play;
## JACINを1回のみ引く。(1パン)
$j2_p = $play * ($r_nojac/$rand)**($play-1) * ($r6/$rand); # 組み合わせ $play (通り)
$j2_get = $total_jac + $exp_nojac * ($play-1);
## JACINを2回引く。(2パン)
$j3_p = &combi($play, 2) * ($r6/$rand)**2 * ($r_nojac/$rand)**($play-2);
$j3_get = $total_jac*2 + $exp_nojac * ($play-2);
## JACINを3回引く。(完走)($i+1) P 目に3回目のJACIN
for ($i=2; $i<=$play-1; $i++) {
$combi = &combi($i, ($i-2));
$j4_p[$i] = $combi * ($r6/$rand)**3 * ($r_nojac/$rand)**($i-2);
$j4_get[$i] = $total_jac * 3 + $exp_nojac * ($i-2);
}
$j_ex = $j1_p * $j1_get + $j2_p * $j2_get + $j3_p * $j3_get;
for ($i=2; $i<=$play-1; $i++) {
$j_ex += $j4_p[$i] * $j4_get[$i];
}
}
# 最終的な期待枚数。 $total_coin ハズシ使用, $jun_coin 順押し
$exp_last[0] = ($z_exp + $exp[0]) * $prob[0];
$exp_last[1] = ($y_exp + $exp[1]) * $prob[1];
for ($i=2; $i<=$play-$jun; $i++) {
$exp_last[$i] = ($x_exp + $exp[$i]) * $prob[$i];
}
$total_coin = $big; # BIG を揃えた時の払出し枚数
for ($i=0; $i<=$play-$jun; $i++) {
$total_coin += $exp_last[$i];
}
$jun_coin = $j_ex + $big; # 順押しでの獲得枚数
$haz_plus = $total_coin - $jun_coin; # ハズシ効果
# 桁揃え
$jac_game = &point($jac_game,3);
$total_coin = &point($total_coin,3);
$jun_coin = &point($jun_coin,3);
$haz_plus = &point($haz_plus,3);
if ($hazushi_no==1) { $total_coin = '----'; $haz_plus = '----'; }
# 結果の表示 と フッタ
print <<"__ RESULT __";
<br>
<table border=0 align='center'><tr valign='top'><td>
<table border=1 cellspacing=0>
<caption>計算結果</caption>
<tr><td colspan=2 bgcolor='#ffffcc'>REG 枚数</td><td align='right'>$jac_game 枚</font></td></tr>
<tr><td colspan=2 bgcolor='#ffffcc'>$jkai回目のJACIN<br>順押し優先</td><td align='right'>残り
<font color='red'>$jun P</font> から</font></td></tr>
<tr><td rowspan=2 bgcolor='#ffffcc'>平均<br>獲得枚数</td><td bgcolor='#ffffcc'>順押し</td>
<td align='right'><font color='red'>$jun_coin</font> 枚</td></tr>
<tr><td bgcolor='#ffffcc'>ハズシ</td><td align=right><font color='red'>$total_coin</font> 枚</td></tr>
<tr><td colspan=2 bgcolor='#ffffcc'>ハズシ効果</td><td align='right'>$haz_plus 枚</td></tr>
</table>
</td><td>
<table border=1 cellspacing=0>
<caption>使用小役データ</caption>
<tr align='center' bgcolor='#ffffcc'><td> </td><td><font size=2>払い出し<br>枚数</td><td><font size=2>確率</td></tr>
<tr align='right'><td><font size=2>小役 1</font></td><td>$coin1 枚</td><td>$r1/$rand</td></tr>
<tr align='right'><td><font size=2>小役 2</font></td><td>$coin2 枚</td><td>$r2/$rand</td></tr>
<tr align='right'><td><font size=2>小役 3</font></td><td>$coin3 枚</td><td>$r3/$rand</td></tr>
<tr align='right'><td><font size=2>小役 4</font></td><td>$coin4 枚</td><td>$r4/$rand</td></tr>
<tr align='right'><td><font size=2>小役 5</font></td><td>$coin5 枚</td><td>$r5/$rand</td></tr>
<tr align='right'><td><font size=2><font color=blue>JACIN</td><td>$jcoin 枚</td><td>$r6/$rand</td></tr>
</table>
</td></tr>
</table>
<br><br>
<table border=0 width='85%' align='center'><tr><td>
入力された各小役確率に最も近い ( X / $rand ) の 整数X を求めて、その値を使用しています。
</td></tr></table>
<br><br>
<strong>[ <a href='../index.html'>home</a> / <a href='index.html'>cgi</a> / <a href='../jug/index.html'>juggler</a> / <a href='../column.html'>column</a> / <a href='../diary/index.html'>diary</a> / <a href='bbs.cgi'>bbs</a> / <a href='../link.html'>link</a> / <a href='../intro.html'>welcome</a> ]</strong>
<div align='right'>[ <a href='big_get_memo.html'>memo</a> / <a href='big_get.html'>source</a> ]</div>
</body></html>
__ RESULT __
exit;
# 組み合わせの計算
sub combi {
my($a, $b, $i, $p1, $p2, $p);
($a, $b) = @_;
$p1 = $p2 = 1;
for ($i=$a; $i>$b; $i--) { $p1 *= $i; }
for ($i=$a-$b; $i>0; $i--) { $p2 *= $i; }
$p = $p1 / $p2;
return $p;
}
# 少数を四捨五入して指定の桁にする
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 ]