2017-02-12 1 views
3

割り当てられ、その最大に取得しクローサー、この質問はので、ここで、いくつかの擬似コードで可視化する必要があるとしている遅く、我々が行く:が添加はそれは大丈夫バリュー

は、私は2つの整数を持っていると言うことができます、1がありますもう一方は定数です。これにより

は言う:これを考慮して

int current = 0; static int max = 20 

を、私は遅く追加する方法を、より近い私が20に到達するので、基本的にそれは実際の例です。ここ20 に到達したことがない:

は、2を加算するのに3秒かかると言うことができます。 しかし、前の2の後に同じ2を追加すると、2倍の時間がかかるなどです。

どのように私はこれを行うに行くか、そのハードを理解することがあれば申し訳ありませんが、私は私の最高:(

感謝を試みたが、素晴らしい一日を過ごす!

+0

exponentials-logarithms/06-population-exponential-growth-01)関数は、あなたが探している可能性が高いです。 – forrestmid

+0

数式は、連続複利計算の計算と似ています。 – guest271314

+0

これは便利なのかどうか分かりませんが、 'current'と' max'の間のギャップは、次のように半分(または3番目...またはどれくらい遅くてもかまいません)追加してください。 'curent + = - 現在)/ 2; '! –

答えて

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); 
 
\t 
 
    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で。

0

あなたは

A = PeとRT Aの量を得ている

式を使用することができます。 Pがプリンシパルを開始しています。 eは、一般にオイラーの数と呼ばれる自然対数の底であるeで、約2.718281828459045です。 rは小数点としての利率です。 tは、一般に360で除算された、時の時間です。

には関心が0のプリンシパルを生ずることができないように結果は、0であろう0の開始プリンシパルを考えます。公称値.01から始めて、新しい元本を前の元本に加算された未払利息の結果に設定することができます。 do..whileループは新しいプリンシパルを生成するために使用することができるjavascript

は、ここでは、半分の起動速度でループを停止する、または直ちにその機能を押して、現在のプリンシパルを渡すために関数式を呼び出す.05/2do..while内でループを作成しますcurrent又はcurrent * durationPromiseを返し、durationは正の整数、current又はcurrent * durationによって次setTimeoutの持続時間を増加させる、順次Promiseを返す関数を呼び出すことArray.prototype.reduce()を利用あります。

あなたはまたMath.exp(r * (t/n))又は

A = PeとR(T/N)nの速度で主1から連続的関心、化合物、例えば、360かもしれ

に式を調整することができ.05の場合、do..whileループ360回、会計年度を実行します。最大結果が1.0512710963760241であり、合計利息は.0512710963760241であり、1の間でより多くの合計結果をもたらすであろう。1は、5%の率で1年間連続的に配合される。

1~compoundを渡す関数は、1.0512710963760241を返します。あなたはあなたの機能が動作する方法に応じて異なる式セットの任意の数、[対数](http://www.coolmath.com/algebra/17-を使用することができます

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}`; 
 
});
<output></output>

関連する問題