javascript - 在javascript中按比例增加这些数字的数学正确方法是什么?

标签 javascript math

我正在构建一个基于 Box Müller 变换的随机游走生成器。转换从 0 的起点生成数字在正负方向上线性地创建“趋势正常”归一化随机游走。我想要做的是将其结果应用于基数,例如 100 ,但将其按比例应用于该特定数字大小。通过“应用”,我想我想乘以,但我不是 100% 确定。
例如,如果基数是 1 ,我不一定要添加随机游走结果 2.145...给它,但也许 0.02145...给它。或者如果基数是 1000 , 我想补充一下 21.45...给它。
我写了以下内容,通过观察结果似乎可以正常工作:

let result = boxMullerResult // results from my boxMuller random walk
let base = 100 // set a starting number

// apply the results to the starting number
// not sure if this function is even needed, because there could be simple math for it?
function getMultiplier(base) {
    let digits = Math.floor(Math.log10(base)) + 1 // get a count of digits in base
    return digits == 6 ? 100000
         : digits == 5 ? 10000
         : digits == 4 ? 1000
         : digits == 3 ? 100
         : digits == 2 ? 10
         : digits == 1 ? 1
         : 0.01
}
let multiplier = getMultiplier(base)
result = base+((result/base)*multiplier) //not sure of this math, really
console.log(Math.abs(result)) // Math.abs for cryptocurrency example (price can not be negative)
样本输出:
102.65786245109346
102.80789090168939
103.31327926664707
103.81866763160474
104.01517135943189
104.21167508725905
104.25864043241288
104.3056057775667
104.59017554334307
104.87474530911942
105.39312728890096
105.91150926868248
105.97736617138204
106.04322307408161
105.57535946204703
105.10749585001244
105.31044946513785
105.51340308026325
105.42995897505484
105.34651486984644
104.94740888496884
104.54830290009122
100.58712054941161
101.17424109882323
101.29026537304657
101.4062896472699
101.02832352564248
100.65035740401505
但我不确定它在数学上是否准确。
为了进一步帮助澄清我的问题,假设我正在模拟加密货币价格变动,基准价格为 13,016.30 .当我得到我的随机游走结果时,我想将该结果相当现实地应用于其给定尺寸的基本价格。
那么,将我的随机游走结果按比例应用于给定基数的数学正确方法是什么?我不是数学家,我不知道我试图描述的概念的正确名称,并为此道歉。对数学和/或代码的任何帮助都非常有值(value)。

最佳答案

您所描述的是百分比变化。2.145%10.021452.145%100021.45 .
因此,只需将其视为百分比变化:

function percent (percentage, base) {
    return percentage * base / 100; // the usual percentage calculation we
                                    // learn at school and do in our heads
                                    // when shopping
}

function applyPercentageChange (percentage, value) {
    return value + percent(pecentage,value); // add the percentage change
}
这基本上是您的“应用”功能。
它不必是百分比。您可以使用任何分数系统。例如,您可以按分数的部分(每 20 部分)而不是百分比来缩放它:
function partPerScore (change, base) {
    return change * base / 20; // 20 instead of 100
}

function applyScaledChange (change, value) {
    return value + partPerScore(change,value); // add the percentage change
}
您的 base+((result/base)*multiplier)几乎是正确的,但应该是:
base+(result*(base/multiplier))
如果你不熟悉这种形式的公式,那么这个版本可能更直观:
base+((result/multiplier)*base)
如果将乘数更改为 100,您可以清楚地看到它是百分比:
base+((result/100)*base)

关于javascript - 在javascript中按比例增加这些数字的数学正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64498877/

相关文章:

c++ - 如何计算大数的正弦

javascript - 异步/等待类构造函数

Javascript : Increment name if exist

c# - 添加到位数组

algorithm - 找到所有可能的数字集的最大值和最小值之间的最小差异

c++ - C/C++ 中的最小二乘回归

c++ - 动态描述数学规则

javascript - 我的日期函数出现 Node JS 错误,出了什么问题?

javascript - 数组的深层复制导致范围错误 : maximum call stack size exceeded javascript

javascript - 拖动时光标变回工字梁