【发布时间】:2021-12-29 13:15:57
【问题描述】:
我有这个算法,我必须实现:
- 生成 u ~ U(0,1) - 0 到 1 之间的随机数
- 生成 Y = Math.log(u)
- 如果 u
- x1 = y
- 生成 u ~ U(0,1)
- 如果 u
- x = s*x1
程序应该返回 x
这是我到目前为止编写的代码,但它只是在无限循环中运行,并且什么也不返回。我该如何解决这个问题?
let u = Math.random();
let y = -Math.log(u);
let e = 2.718281828459045;
let s;
let flag = false;
if (u <= e ** (-(y ** 2) / 2 + y - 0.5)) {
flag = true;
while (flag) {
u = Math.random();
y = -Math.log(u);
}
} else {
let x1 = y;
u = Math.random();
if (u <= 0.5) {
s = 1;
} else {
s = -1;
}
x = s * x1;
console.log(x);
}
【问题讨论】:
-
How do I ask a good question?: "描述问题。“它不起作用”的描述不足以帮助人们理解您的问题。相反,告诉其他人读者预期的行为应该是什么。告诉其他读者错误消息的确切措辞是什么,以及产生它的代码行。"
-
我没有检查你所有的代码,但是
while (flag) {...}你正在创建一个很好的活动无限循环。
标签: javascript algorithm normal-distribution