node.js - NodeJS is faster than D when computing prime numbers. How? -
node.js - NodeJS is faster than D when computing prime numbers. How? -
i wrote simple function computing prime numbers in d. thought pretty quick, calculating prime numbers 100,000. wanted compare nodejs. when ran nodejs script first time, astounded @ difference , double checked wasn't skipping sort of calculation how. 2 pretty identical functionally.
d:
import std.stdio; import std.math; import std.datetime; import std.file; import std.array; enum size_t iterations = 100_000; bool divisible(real n) { real d; for(d = 3; d < floor(n / 2); d += 2) { if(n % d == 0) { homecoming true; } } homecoming false; } void main() { stopwatch sw; size_t t = iterations; size_t c = 0; real n = 2; real r[iterations]; r[c] = n; sw.start(); c++; for(n = 3; n < t; n += 2) { if(!divisible(n)) { r[c] = n; c++; } } sw.stop(); double seconds = cast(double)sw.peek().usecs / 1_000_000; writeln("\n\n", c, " prime numbers calculated in ", seconds, " seconds."); file file = file("primes.txt", "w"); file.writeln("\n", c, " prime numbers calculated ", seconds, " seconds."); foreach(number; r[0..c]) { file.writeln(number); } file.writeln("\n", "end"); file.close(); }
nodejs:
var fs = require('fs'); var iterations = 100000; function divisible(n) { var d; for(d = 3; d < math.floor(n / 2); d += 2) { if(n % d == 0) { homecoming true; } } homecoming false; } (function() { var buffer = [ ], = date.now(), c = 0 n = 2 ; buffer.push(n); c++; for(n = 3; n < iterations; n += 2) { if(!divisible(n)) { buffer.push(n); c++; } } var time = date.now() - now, seconds = time / 1000 ; console.log("\n\n", c, " prime numbers calculated. process took ", seconds, " seconds."); buffer.push("\n" + c + " prime numbers calculated. process took " + seconds + " seconds."); fs.writefile("node_primes.txt", buffer.join("\n"), function(err) { if(err) throw err; console.log("primes have been written file."); }); })();
results:
calculating 100,000 primes: d: 3.49126 seconds nodejs: 0.652 seconds
can explain why happening?
thanks in advance.
by unnecessarily declaring variables real
, forcing floating point arithmetic integer arithmetic used. replace instances of real
int
, rid of floor()
, d programme run fast node.js version:
import std.stdio; import std.math; import std.datetime; import std.file; import std.array; enum size_t iterations = 100_000; bool divisible(int n) { int d; for(d = 3; d < n / 2; d += 2) { if(n % d == 0) { homecoming true; } } homecoming false; } void main() { stopwatch sw; size_t t = iterations; size_t c = 0; int n = 2; int r[iterations]; r[c] = n; sw.start(); c++; for(n = 3; n < t; n += 2) { if(!divisible(n)) { r[c] = n; c++; } } sw.stop(); double seconds = cast(double)sw.peek().usecs / 1_000_000; writeln("\n\n", c, " prime numbers calculated in ", seconds, " seconds."); file file = file("primes.txt", "w"); file.writeln("\n", c, " prime numbers calculated ", seconds, " seconds."); foreach(number; r[0..c]) { file.writeln(number); } file.writeln("\n", "end"); file.close(); }
node.js performance time d primes
Comments
Post a Comment