1

所以我有一个柜台。它应该计算某物的当前数量。为了计算这个,我知道开始日期和开始数量,以及每秒增加计数器的数量。十分简单。棘手的部分是增长不是完全线性的。每天,增量量都会增加一个设定量。我需要在算法上重新创建这个 - 基本上根据起始值、随时间增加的数量以及随时间增加的数量来计算当前日期的确切值。

我的目标语言是 Javascript,但伪代码也可以。

基于AB的解决方案:

var now = new Date();

var startDate1 = new Date("January 1 2010");
var days1 = (now - startDate1) / 1000 / 60 / 60 / 24;
var startNumber1 = 9344747520;
var startIncrement1 = 463;
var dailyIncrementAdjustment1 = .506;
var currentIncrement = startIncrement1 + (dailyIncrementAdjustment1 * days1);

startNumber1 = startNumber1 + (days1 / 2) * (2 * startIncrement1 + (days1 - 1) * dailyIncrementAdjustment1);

你们觉得这合理吗?

4

3 回答 3

2

这是一个二次函数。如果t是经过的时间,则通常在2 +bt+c,您可以a,b,c通过替换前 3 秒的结果来计算。

或者:使用算术级数和的公式,其中a1是初始增量,d是您所指的“设定量”。只是不要忘记将您的“起始金额”添加到公式给您的内容中。

如果x 0为初始量,d 为初始增量,e 为增加增量的“设定量”,则为x 0 + (t/2)*(2d + (t-1)*e)

于 2010-03-09T16:50:23.697 回答
1

如果我正确理解你的问题,你有一个初始值x_0,每秒的初始增量和每天d_0的增量调整。e也就是说,在第一天,每秒的增量是d_0,在第二天,每秒的增量是d_0 + e,等等。

然后,我们注意到时间每秒的增量t

d(t) = d_0 + floor(t / S) * e

其中S是每天t的秒数,是自 以来经过的秒数t = t_0。然后

x = x_0 + sum_{k < floor(t / S)} S * d(k) + S * (t / S - floor(t / S)) * d(t)

是您正在寻找的公式。从这里,您可以将其简化为

x = x_0 + S * floor(t / S) d_0 + S * e * (floor(t / S) - 1) * floor(t / S) / 2.
于 2010-03-09T16:45:48.170 回答
0
use strict; use warnings;

my $start = 0;
my $stop = 100;
my $current = $start;

for my $day ( 1 ..  100 ) {
    $current += ($day / 10);
    last unless $current < $stop;
    printf "Day: %d\tLeft %.2f\n", $day, (1 - $current/$stop);
}

输出:

天数:1 还剩 1.00
天数:2 还剩 1.00
天数:3 还剩 0.99
天数:4 还剩 0.99
天数:5 还剩 0.98
...
天数:42 还剩 0.10
天数:43 还剩 0.05
天数:44 还剩 0.01
于 2010-03-09T16:44:30.153 回答