performance - Math.floor VS Math.trunc JavaScript -


background

i making function receives positive number , rounds number closest integer bellow it.

i have been using math.floor, discovered math.trunc.

i aware both return same value, given positive number, , work in different ways. interested in exploring behavior.

questions

  1. which 1 faster ?
  2. which 1 should use?

actually, there more alternative ways remove decimals number. it's tradeoff of readability , speed.

choosing right 1 depends on need. if need remove decimals, use trunc() or bitwise operators.
floor(), ceil() , round() conceptually different trunc().

math library

you know these. use them in standard, non-critical code.

var v = 3.14; [math.trunc(v), math.floor(v), math.ceil(v), math.round(v)] // prints results 

for different input values these results

          t   f   c   r  3.87 : [ 3,  3,  4,  4]  3.14 : [ 3,  3,  4,  3] -3.14 : [-3, -4, -3, -3] -3.87 : [-3, -4, -3, -4] 

but more fun :)

binary operations , bitwise operators

if @ them in code, might not apparent first glance do, don't use them. though in cases, might useful. example calculating coordinates in <canvas/>. faster, come limitations.

conceptually, work way:

  • the operands converted 32-bit integers. (numbers more 32 bits significant bits discarded.)

bitwise logical operators

  • each bit in first operand paired corresponding bit in second operand. (first bit first bit, second bit second bit, , on.)
  • the operator applied each pair of bits, , result constructed bitwise.

bitwise shift operators

  • these operators take value shifted , number of bit positions shift value by.

however, use 0, zero, false second operand, doesn't original value in these cases:

~    not    ~~v

|    or    v | 0

<<   left shift    v << 0

>>   signed right shift    v >> 0

>>>  zero-fill right shift    v >>> 0

var v = 3.78; [ ~~v ,  v | 0 ,  v << 0 ,  v >> 0 ,  v >>> 0 ] // prints these results   3.78 : [ 3,  3,  3,  3, 3]  3.14 : [ 3,  3,  3,  3, 3] -3.74 : [-3, -3, -3, -3, 4294967293] -3.14 : [-3, -3, -3, -3, 4294967293] 

Comments