Note that there are some explanatory texts on larger screens.

plurals
  1. POSame code takes longer if executed more often?
    primarykey
    data
    text
    <p>I've got the following code inside a <code>&lt;script&gt;</code> tag on a webpage with nothing else on it. I'm afraid I do not presently have it online. As you can see, it adds up all primes under two million, in two different ways, and calculates how long it took on average. The variable <code>howOften</code> is used to do this a number of times so you can average it out. What puzzles me is, for <code>howOften == 1</code>, method 2 is faster, but for <code>howOften == 10</code>, method 1 is. The difference is significant and holds even if you hit F5 a couple of times.</p> <p>My question is simply: how come?</p> <p>(This post has been edited to incorporate alf's suggestion. But that made no difference! I'm very much puzzled now.)</p> <p>(Edited again: with <code>howOften</code> at or over 1000, the times seem stable. Alf's answer seems correct.)</p> <pre><code>function methodOne(maxN) { var sum, primes_inv, i, j; sum = 0; primes_inv = []; for ( var i = 2; i &lt; maxN; ++i ) { if ( primes_inv[i] == undefined ) { sum += i; for ( var j = i; j &lt; maxN; j += i ) { primes_inv[j] = true; } } } return sum; } function methodTwo(maxN) { var i, j, p, sum, ps, n; n = ((maxN - 2) / 2); sum = n * (n + 2); ps = []; for(i = 1; i &lt;= n; i++) { for(j = i; j &lt;= n; j++) { p = i + j + 2 * i * j; if(p &lt;= n) { if(ps[p] == undefined) { sum -= p * 2 + 1; ps[p] = true; } } else { break; } } } return sum + 2; } // ---------- parameters var howOften = 10; var maxN = 10000; console.log('iterations: ', howOften); console.log('maxN: ', maxN); // ---------- dry runs for warm-up for( i = 0; i &lt; 1000; i++ ) { sum = methodOne(maxN); sum = methodTwo(maxN); } // ---------- method one var start = (new Date).getTime(); for( i = 0; i &lt; howOften; i++ ) sum = methodOne(maxN); var stop = (new Date).getTime(); console.log('methodOne: ', (stop - start) / howOften); // ---------- method two for( i = 0; i &lt; howOften; i++ ) sum = methodTwo(maxN); var stop2 = (new Date).getTime(); console.log('methodTwo: ', (stop2 - stop) / howOften); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload