扰动非常小的数值(在0.001和0.999之间)

时间:2014-09-16 14:54:36

标签: php math random

我在MySQL中有一个数值存储为decimal(8,3)的表。我正在提取这些值以供显示,但我需要先稍微更改值(使用data perturbation)。例如:

a: 0.123
b: 0.011
c: 0.003

会被扰乱并显示为:

a: 0.125
b: 0.010
c: 0.001

如果我第二次提交相同的报告,我可能会得到类似的结果:

a: 0.119
b: 0.005
c: 0.005

这个想法是让扰动在价值与价值之间不可预测,同时保持价值接近原价。它可能会增加.001,然后在下一个值上减少.003。

任何时候一个值都不应该变为负数或0.如果我有.001,那么它应该被随机扰动,以便之后达到.001或更高。

我目前正在使用它来扰乱大于1的值,它工作正常。当传递一个低于1的值时,我的扰动值是没有意义的。

    $perturbed = $v + ( mt_rand( $v*(-1), 40) / 100 );

例如,如果$ v为.04,则$扰动可能会达到0.99,这在给定$ v的统计范围之外。

数据集相对较大,因此无论何种解决方案都需要不花费大量处理能力。

0 个答案:

没有答案