メイン 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