clamp functions (with local caching of Math funcitions) (v6)

Revision 6 of this benchmark created by keville on


Description

Which is faster?

Preparation HTML

<script>
  (function(global) {
    var min = Math.min,
        max = Math.max;

    function clamp1(x, a, b) {
      return x < a ? a : x > b ? b : x
    }

    function clamp2(x, a, b) {
      return Math.min(Math.max(x, a), b)
    }

    function clamp3(x, a, b) {
      return min(max(x, a), b)
    }

    function clamp4(num, min, max) {
      if (num < min) return min;
      if (max < num) return max;
      return num;
    }

    function clamp5(num, min, max) {
      if (min < num) {
        if (num < max) {
          return num;
        }
        return max;
      }
      return min;
    }

    function clamp6(num, min, max) {
      if (num <= min) return min;
      if (max <= num) return max;
      return num;
    }

    function clamp7(x, a, b) {
      var m_min = Math.min,
          m_max = Math.max;
      return m_min(m_max(x, a), b)
    }

    global.clamp1 = clamp1;
    global.clamp2 = clamp2;
    global.clamp3 = clamp3;
    global.clamp4 = clamp4;
    global.clamp5 = clamp5;
    global.clamp6 = clamp6;
    global.clamp7 = clamp7;
  })(window)
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Using ? :
clamp1(-11, 2, 7);
clamp1(4, 2, 7);
clamp1(7, 2, 7);
clamp1(11, 2, 7);
ready
using Math object
clamp2(-11, 2, 7);
clamp2(4, 2, 7);
clamp2(7, 2, 7);
clamp2(11, 2, 7);
ready
using cached Math functions
clamp3(-11, 2, 7);
clamp3(4, 2, 7);
clamp3(7, 2, 7);
clamp3(11, 2, 7);
ready
Return fast if out of range
clamp4(-11, 2, 7);
clamp4(4, 2, 7);
clamp4(7, 2, 7);
clamp4(11, 2, 7);
ready
Return fast if in range
clamp5(-11, 2, 7);
clamp5(4, 2, 7);
clamp5(7, 2, 7);
clamp5(11, 2, 7);
ready
Return fast if out of range 2
clamp6(-11, 2, 7);
clamp6(4, 2, 7);
clamp6(7, 2, 7);
clamp6(11, 2, 7);
ready
Using locally cached Math functions
clamp7(-11, 2, 7);
clamp7(4, 2, 7);
clamp7(7, 2, 7);
clamp7(11, 2, 7);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.