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 ]