我正在为我的青年俱乐部写一个程序(http://dancingrobots.org/beurs/),根据上一轮购买的次数计算饮料的价格(相当有趣的派对概念)。现在我计算价格的方式是这样的:

cola = cola * (vercola / pastVerCola);

可乐的价格在哪
韦科拉是这一轮收购的时代。
帕斯韦科拉是上一轮收购的时候。
一杯酒不能低于0.5欧元,也不能高于10欧元。
我的两个问题是:
价格波动太大(从最高点到最低点都有可能
相反)
如果饮料是0买的两倍,则错误为(0/0)
对于那些浓缩的,这里是完整的代码:http://pastebin.com/PsT2v2Tr

最佳答案

如果要减小波动,可以使用平方根:

cola = cola * Math.sqrt(vercola / pastVerCola);

多次使用sqrt来进一步减少它。
另一种方法(我以前用过)是用一个固定的负载来抑制波动。
cola = cola * (vercola + 50) / (pastVerCola + 50);

这很有用,因为它还允许您在每轮中自动增加/减少价格(使用40、50、60等)
你可以把这两种效果结合起来得到你需要的波动例如
var VER = 40;     // Constant
var PASTVER = 60; // Constant
cola = cola * Math.sqrt((vercola + VER) / (pastVerCola + PASTVER));

顺便说一句,我认为错误是由于没有人买一轮特定的饮料。PastVercola将被设置为零,给您一个除以零的错误。使用常量可以完全避免这种情况。

09-26 02:27