好的,这个问题必须用一些伪代码可视化,所以我们走了:
假设我有2个整数,一个是变量,另一个是常数。
这样说:
int current = 0; static int max = 20
考虑到这一点,我将如何添加更慢,越接近20,所以基本上它实际上从未达到20。 这是一个例子:
假设添加2需要3秒 但是加上相同的2,之前的2需要两倍,依此类推。
我怎么会这样做,对不起,如果它很难理解,但我尽我所能:(
谢谢,祝你有个美好的一天!
答案 0 :(得分:0)
一个可以玩的例子。
function progressiveInterpolatorThatNeverReachesTheEnd(rate, speed){
speed = +speed || 1;
var start = Date.now();
return function(a, b){
var time = (Date.now() - start);
var t = Math.pow(1-rate, time * speed/1000);
return a*t + b*(1-t);
}
}
var start = Date.now();
var interpolate = progressiveInterpolatorThatNeverReachesTheEnd(1/16, 1/10);
var output = document.getElementById("output");
function update(){
var a = 0, b = 100, c = interpolate(a, b);
output.innerHTML = a + " .. " + Math.floor(c) + " .. " + b + "<br> actually: " + c + "<br>runtime: " + (Date.now() - start)/1000 + "s";
requestAnimationFrame(update);
//or
//setTimeout(update, Math.random() * 500);
//because update interval doesn't matter
}
update();
<div id="output"></div>
实际上,由于JS中数字的精确度有限,这段代码最终会到达终点。
答案 1 :(得分:0)
您可以使用公式
A = Pe rt
其中A
为结果金额; P
是首席校长; e
是数学无理常数e
,是自然对数的基数,通常称为欧拉数,约为2.718281828459045
; r
是十进制的利率; t
是以年为单位的时间,通常除以360
。
给定0
的起始主体,结果将是0
,因为没有兴趣可以累积0
的主体。我们可以从.01
的名义价值开始,然后将新的本金设置为添加到前一个本金的应计利息的结果。
在javascript
中,do..while
循环可用于生成新主体,此处,我们以启动速率的一半停止循环,或.05/2
循环do..while
循环创建一个立即调用函数表达式来传递当前主体,推送一个在Promise
或current
之后返回current * duration
的函数,其中duration
是一个正整数,利用{{1调用按顺序返回Array.prototype.reduce()
的函数,将Promise
的持续时间增加setTimeout
或current
。
您还可以将公式调整为current * duration
或
A = Pe r(t / n)
其中Math.exp(r * (t/n))
可以是n
,以360
的速率从主体1
连续复合兴趣,执行.05
循环{{ 1}}次,一个会计年度;这会在do..while
之间产生更多的总结果,即360
以1
的速度连续复合1年,最大可能结果为1
,总计5%
应计利息为1.0512710963760241
。
将.0512710963760241
传递给1
函数会返回compound
。
1.0512710963760241
var current = 0; // principal
var max = 20; // maturity, in years
var rate = .05; // annual rate as decimal
var time = 1; // time in years, alternatively `1/360`
var N = 360; // fiscal year
var arr = []; // store functions which return a `Promise`
var duration = 500;
var output = document.querySelector("output");
function compound(p, r, t) {
return ((p||.01) * Math.exp(r * t)); // or `Math.exp(r * (t/N))`
}
do {
current = compound(current, rate, time);
(function(curr) {
arr.push(
function() {
return new Promise(function(resolve) {
setTimeout(function() {
output.innerHTML += `current principal: ${curr}<br>`;
resolve();
}, curr * duration)
})
}
)
})(current)
} while (current < max - (rate / 2));
arr.reduce(function(promise, next) {
return promise.then(next)
}, Promise.resolve())
.then(function() {
output.innerHTML += `<br>max - current: ${max - current}`;
});