我想在这个范围内生成一个随机数:[0.79, 2.7]
每次生成一个数字,我都想存储它的值,以便下次生成新数字时,它的绝对值(与前一个相比)差异从未大于0.01。
我想模拟的是加密货币在0.01步内的价值波动
我想出了这个方法:
const MIN = 0.79
const MAX = 2.7
const DIFF = 0.01
const INTERVAL = 1000
let previous = undefined
function getRandom() {
let current = Math.random() * (MAX - MIN) + MIN;
if (Math.abs(current - (previous || current)) > DIFF){
return getRandom()
} else {
previous = current
return current
}
}
setInterval(() => {
console.log(getRandom())
}, INTERVAL)
它工作,因为在MIN
,MAX
和DIFF
限制应用。然而,我得到的值似乎总是围绕将生成的第一个随机数波动。因此,如果我得到的第一个随机数是例如2.34
,那么我将开始得到:
2.338268500646769
2.3415300555082035
2.3438416874302623
2.3475220779731107
2.3552742162452693
2.353575076772505
2.3502457929806693
2.3561300642858143
2.353045875361622
2.3592926605489004
2.360013424409005
2.3520769942926023
然而,我想要的是让它们以0.01步从0.79波动到2.7,但随机。因此,加密货币的价值可能会在X秒内上升,然后在Y秒内下降,然后在Z秒内进一步下降,然后在T秒内突然上升,等等。
你能想到一个模拟的算法吗?
提前感谢您的帮助。
根据@Andreas的评论,下面的工作很好:
const MIN = 0.79
const MAX = 2.7
const DIFF = 0.01
let previous = Math.random() * (MAX - MIN) + MIN
function getRandom() {
let current = Math.random() < 0.5 ? previous + DIFF : previous - DIFF
if (current < MIN) {
current = MIN
} else if (current > MAX) {
current = MAX
}
previous = current
return current
}
setInterval(() => {
console.log(getRandom())
}, 100)