public
Last active

  • Download Gist
add_normal.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
function add() {
// Start from zero
var total = 0;
 
// Floating-points, bah!
// 1e12 = 1000000000000.
var factor = 1e12;
 
// Undefined, set in the loop
var value;
 
// Something to iterate on
var i = arguments.length;
 
// Loop through all the parameters
while (i--) {
// Multiply by 1e12, to account for peculiarities
// of doing addition with floating-point numbers.
value = parseFloat(arguments[i]) * factor;
 
// Is it not, not a number?
// Then hey, it's a number!
if (!isNaN(value)) {
total += value;
}
}
 
// Divide back by 1e12, because we multiplied by
// 1e12 to account for floating-point weirdness.
return total/factor;
}
exotic_add.js
JavaScript
1 2 3 4 5 6 7 8 9 10
// can you figure it out?
function add() {
var args = [].slice.call(arguments), total = 0;
for (;args.length; args.shift()) {
!args[0] || typeof args[0] === 'boolean' || (total += parseFloat( !(args[0]*1) ? 0 : args[0] ) * 1e12);
}
return total/1e12;
}
question.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11
// Should equal 15
add(1, 2, 3, 4, 5);
 
// Should equal 0
add(5, null, -5);
 
// Should equal 10
add('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1);
 
// Should equal 0.3, not 0.30000000000000004
add(0.1, 0.2);

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.