所以我有一个柜台。它应该计算当前的东西量。为了计算这一点,我知道开始日期,开始金额以及每秒增加计数器的数量。十分简单。棘手的部分是增长不是很线性。每天,增量增加一定量。我需要在算法上重新创建 - 基本上根据起始值,随时间增加的量以及增量随时间增加的量来计算当前日期的确切值。
我的目标语言是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);
这对你们来说看起来合情合理吗?
答案 0 :(得分:2)
这是二次函数。如果t
是时间过去,那么通常在 2 + bt + c,你可以通过将结果替换为前3秒来找出a,b,c
。 / p>
或者:使用arithmetic progression总和的公式,其中a1
是初始增量,d
是您所指的“设定金额”。只是不要忘记将“起始量”添加到公式给你的内容。
如果x 0 是初始量,d是初始增量,e是增加启动量的“设定量”,它来到 x 0 +(t / 2)*(2d +(t-1)* e)
答案 1 :(得分: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.
答案 2 :(得分: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);
}
输出:
Day: 1 Left 1.00 Day: 2 Left 1.00 Day: 3 Left 0.99 Day: 4 Left 0.99 Day: 5 Left 0.98 ... Day: 42 Left 0.10 Day: 43 Left 0.05 Day: 44 Left 0.01