メイン random.html   Last modified: Sep 01, 2009
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;CHARSET=EUC-JP">
<link rel="shortcut icon" href="../favicon.ico">
<title>JavaScript</title>

<script language="JavaScript">
<!--
var newline = (navigator.appVersion.lastIndexOf('Win') != -1) ? "\r\n" : "\n"
var _line
var INTERVAL = 50

function eolp(i, pack)
{
  return (pack == 1 || i % pack == 0) ? newline : "\t"
}

function fixed(x, d)
{
  var str = ""+Math.round(x*Math.pow(10,d))/Math.pow(10,d)
//  return str.charAt(0) == "." ? "0"+str : (str.indexOf("-.") >= 0 ? str.replace("-.", "-0.") : str) // NN3.x では使えない
  if ((""+str).charAt(0) == ".") {    // .123 のようなときがある−−>先頭に 0 を付加する
    str = "0"+str
  }
  else if ((""+str).indexOf("-.") != -1) {  // -.123 のようなときがある−−>先頭に -0 を付加する
    str = "-0"+(""+str).substring(1, (""+str).length)
  }
  return str
}

function getpack(pack1)
{
  var retv = parseInt(pack1)
  if (isNaN(retv) || retv <= 0 || retv > 100) {
    alert("1行あたりの出力する個数の指定が不適当です。10個ずつ出力します。")
    return 10
  }
  else {
    return retv
  }
}

function getdigit(digit1)
{
  var retv = parseInt(digit1)
  if (isNaN(retv) || retv < 0 || retv > 10) {
    alert("小数点以下の桁数の指定が不適当です。小数点以下 5 桁で出力します。")
    return 5
  }
  else {
    return retv
  }
}

function getsize(size1)
{
  var retv
  if (isNaN(retv = parseInt(size1)) || retv <= 0) {
    alert("発生させる乱数の個数は正整数でなくてはいけません。とりあえず10個の乱数を出力します。")
    return 10
  }
  else if (retv > 5000) {
    for (;;) {
      retv = prompt("個数が多すぎます。変えるなら今のうちです。", "200")
      if (! isNaN(retv = parseInt(retv))) {
        return retv
      }
      alert("個数を答えてください。")
    }
  }
  else {
    return retv
  }
}

function fixed_u(x, d)
{
  var temp = Math.floor(x*Math.pow(10,d))/Math.pow(10,d)
  if ((""+temp).charAt(0) == ".") {
    temp = "0"+temp
  }
  else if ((""+temp).substring(0,2) == "-." ) {
    temp = "-0"+((""+temp).substring(1,(""+temp).length))
  }
  return temp
}

function urand(pack1, size1, digit1, lower1, upper1)
{
  var pack, size, digit, lower, upper, i, width, temp
  pack = getpack(pack1)
  size = getsize(size1)
  digit = getdigit(digit1)
  lower = parseFloat(lower1)
  upper = parseFloat(upper1)
  if (lower > upper) {
    temp = lower
    lower = upper
    upper = temp
  }
  width = upper-lower
  document.Result.kind.value = "一様乱数  範囲: "+lower+"≦発生される乱数<"+upper
  document.Result.result.value = "乱数発生中"
  _line = ""
  for (i = 1; i <= size; i++) {
    if (i % INTERVAL == 0) document.Result.report.value = i+" 個発生済み"
    _line += fixed_u(Math.random()*width+lower, digit) + eolp(i, pack)
  }
  document.Result.result.value = _line
}

var SysSW = 0, SysZ1, SysZ2

function n_rand() 
{
  var u1, u2
  SysSW = 1-SysSW
  if (SysSW == 1) {
    u1 = Math.sqrt(-2.0*Math.log(Math.random()))
    u2 = 2.0*Math.PI*Math.random()
    SysZ1 = u1*Math.cos(u2)
    SysZ2 = u1*Math.sin(u2)
    return SysZ1
  }
  else {
    return SysZ2
  }
}

function nrand(pack1, size1, digit1, mu1, sigma1)
{
  var pack, size, digit, mu, sigma, i
  pack = getpack(pack1)
  size = getsize(size1)
  digit = getdigit(digit1)
  mu = parseFloat(mu1)
  sigma = parseFloat(sigma1)
  if (isNaN(mu) ) {
    alert("母平均の指定が変です。")
    return
  }
  if (isNaN(sigma) || sigma <= 0) {
    alert("母標準偏差は正の値でなくてはいけません。")
    return
  }
  document.Result.kind.value = "正規乱数 母平均="+mu+",母標準偏差="+sigma
  document.Result.result.value = "乱数発生中"
  _line = ""
  for (i = 1; i <= size; i++) {
    if (i % INTERVAL == 0) document.Result.report.value = i+" 個発生済み"
    _line += fixed(n_rand()*sigma+mu, digit) + eolp(i, pack)
  }
  document.Result.result.value = _line
}

function erand(pack1, size1, digit1, lambda1)
{
  var pack, size, digit, lambda, i
  pack = getpack(pack1)
  size = getsize(size1)
  digit = getdigit(digit1)
  lambda = parseFloat(lambda1)
  if (isNaN(lambda) || lambda <= 0) {
    alert("指数定数は正の値でなくてはいけません。")
    return
  }
  document.Result.kind.value = "指数乱数 指数定数="+lambda
  document.Result.result.value = "乱数発生中"
  _line = ""
  for (i = 1; i <= size; i++) {
    if (i % INTERVAL == 0) document.Result.report.value = i+" 個発生済み"
    _line += fixed(-Math.log(1 - Math.random())/lambda, digit) + eolp(i, pack)
  }
  document.Result.result.value = _line
}

function b_rand(p, n)
{
  var i, r = 0
  for (i = 0; i < n; i++) {
    if (Math.random() < p) {
      r++
    }
  }
  return r
}

function brand(pack1, size1, p1, n1)
{
  var pack, size, p, n, i
  pack = getpack(pack1)
  size = getsize(size1)
  p = parseFloat(p1)
  n = parseInt(n1)
  if (isNaN(p) || p <= 0 || p >= 1) {
    alert("母比率は 0 より大きく 1 より小さい値を指定します。")
    return
  }
  if (isNaN(n) || n <= 0) {
    alert("試行回数は正整数でなくてはいけません。")
    return
  }
  document.Result.kind.value = "二項乱数 母比率="+p+",試行回数="+n
  document.Result.result.value = "乱数発生中"
  _line = ""
  for (i = 1; i <= size; i++) {
    if (i % INTERVAL == 0) document.Result.report.value = i+" 個発生済み"
    _line += b_rand(p,n) + eolp(i, pack)
  }
  document.Result.result.value = _line
}

function p_rand(lambda)
{
  var lambda2 = lambda // NN 3.02 では,(副作用を期待していない場合でも)引数をそのまま使うとだめみたい

  var k = 0
  lambda2 = Math.exp(lambda2) * Math.random()
  while (lambda2 > 1) {
    lambda2 *= Math.random()
    k++
  }
  return k
}

function prand(pack1, size1, lambda1)
{
  var pack, size, lambda, i
  pack = getpack(pack1)
  size = getsize(size1)
  lambda = parseFloat(lambda1)
  if (isNaN(lambda) || lambda <= 0) {
    alert("ポアソン定数 λ は正の値でなくてはいけません。")
    return
  }
  document.Result.kind.value = "ポアソン乱数 ポアソン定数="+lambda
  document.Result.result.value = "乱数発生中"
  _line = ""
  for (i = 1; i <= size; i++) {
    if (i % INTERVAL == 0) document.Result.report.value = i+" 個発生済み"
    _line += p_rand(lambda) + eolp(i, pack)
  }
  document.Result.result.value = _line
}
//-->
</script>
</head>

<body bgcolor="#ffffff">
<font size="+2"><b>各種乱数の発生</b></font> <a  href="src/random.html"><img src="png/src.png" width=35 height=11 alt="src" align=top></a>     Last modified: Jun 01, 2006<hr noshade><p>
<font color="#ff0000" size="+2">以下のプログラムのサポートは終了しました。自己責任でお使い下さい。</font>

<form name=Result>
<script language="JavaScript">
<!--
//-->JavaScript がサポートされていないブラウザですか?
</script>
<table cellspacing=0>
  <tr><td valign=top>
    <table>
      <tr><td valign=top bgcolor="#cf5555">
        <table>
          <tr><td align=center>
            <input type="button" name="calcurate1" value="一様乱数発生" onClick="urand(this.form.pack.value, this.form.size.value, this.form.digit.value, this.form.lower.value, this.form.upper.value)">
          </td></tr>
          <tr><td align=right nowrap>
            下限値 <input name="lower" value="0.0" size=6>
          </td></tr>
          <tr><td align=right nowrap>
            上限値 <input name="upper" value="1.0" size=6>
          </td></tr>
        </table>
      </td>
      <td valign=top bgcolor="#cf5555">
        <table>
          <tr><td align=center>
            <input type="button" name="calcurate1" value="正規乱数発生" onClick="nrand(this.form.pack.value, this.form.size.value, this.form.digit.value, this.form.mu.value, this.form.sigma.value)">
          </td></tr>
          <tr><td align=right nowrap>
            母平均値 <input name="mu" value="0.0" size=6>
          </td></tr>
          <tr><td align=right nowrap>
            母標準偏差 <input name="sigma" value="1.0" size=6>
          </td></tr>
        </table>
      </td>
      <td valign=top bgcolor="#af5555">
        <table>
          <tr><td align=center>
            <input type="button" name="calcurate2" value="指数乱数発生" onClick="erand(this.form.pack.value, this.form.size.value, this.form.digit.value, this.form.lambda1.value)">
          </td></tr>
          <tr><td align=right nowrap>
            指数定数 <input name="lambda1" value="0.5" size=6>
          </td></tr>
        </table>
      </td></tr>
      <tr><td align=center colspan=3 bgcolor="#ef5555">
        <table>
          <tr><td>
            乱数の小数点以下の桁数 <input name="digit" value=5 size=6>
          </td></tr>
        </table>
      </td></tr>
    </table>
    </td>
  <td valign=top>
    <table>
      <tr><td valign=top bgcolor="#a0a050">
        <table>
          <tr><td align=center>
            <input type="button" name="calcurate1" value="二項乱数発生" onClick="brand(this.form.pack.value, this.form.size.value, this.form.p.value, this.form.trial.value)">
          </td></tr>
          <tr><td align=right nowrap>
            母比率 <input name="p" value="0.5" size=6>
          </td></tr>
          <tr><td align=right nowrap>
            試行回数 <input name="trial" value="10" size=6>
          </td></tr>
        </table>
      </td>
      <td valign=top bgcolor="#c0a050">
        <table>
          <tr><td align=center>
            <input type="button" name="calcurate1" value="ポアソン乱数発生" onClick="prand(this.form.pack.value, this.form.size.value, this.form.lambda2.value)">
          </td></tr>
          <tr><td align=right nowrap>
            ポアソン定数 <input name="lambda2" value="2" size=6>
          </td></tr>
        </table>
      </td>  </tr>
    </table>
  </td></tr>
  <tr><td align=center colspan=2 bgcolor="#aa55a5">
    <table>
      <tr><td>
        発生させる乱数の個数 <input name="size" value=50 size=6>  一行に<input name="pack" value="5" size=3>個ずつ出力する
      </td></tr>
    </table>
  </td></tr>
</table>

<p>
<input name="kind" value="" size=65> <input name="report" value="" size=20><br>
<textarea name="result" ROWS=20 COLS=80></textarea>
</form>

<p><hr noshade>
<img src="../gra/button3.png" width=9 height=9 alt="・"> <A HREF="javascript:history.go(-1)">直前のページへ戻る</A>  <img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="../mail.html">E-mail to Shigenobu AOKI</a>
<p><center><IMG SRC="../gra/ume5.png" width=121 height=37 ALT="Made with Macintosh"></center>
</body>
</html>


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh