Signum Function (numbers)
JavaScript performance comparison
Info
Derived from this question on StackOverflow: Number.sign() in JavaScript
Versions of the test: test everything — only numbers — only integers
Which approach do you think is the best?
Vote on the answers!
Preparation code
<script>
Benchmark.prototype.setup = function() {
// OUR TEST CODE (see other versions)
function test(sign) {
sign(1) // +1
sign(1908235) // +1
sign(-.1e-1) // -1
sign(Math.random()*2-1) // ??
sign(0) // 0
sign(0.00000) // 0
sign(+Infinity) // +1
sign(-Infinity) // -1
sign(NaN) // 0 or NaN
}
// 1. Obvious and fast
function sign1 (x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }
// 1.1 Modification from kbec - one type cast less, more performant, shorter
function sign1b(x) { return x ? x < 0 ? -1 : 1 : 0; }
// 2. Elegant, short, not so fast
function sign2 (x) { return x && x / Math.abs(x); }
// (some issues with several cases, see answer.)
// 3. The art... but very slow
function sign3 (x) { return (x > 0) - (x < 0); }
// 4. Type-safe:
function sign4 (x) {
return typeof x == 'number' ? x ? x < 0 ? -1 : 1 : isNaN(x) ? NaN : 0 : NaN;
}
};
</script>
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
1. Obvious |
|
pending… |
1.1. Not So Obvious |
|
pending… |
2. Elegant |
|
pending… |
3. Artistic |
|
pending… |
4. Safe |
|
pending… |
You can edit these tests or add even more tests to this page by appending /edit to the URL.
0 comments