code: function safe_multiply(x, y) {
    		/*
    			a = a00 + a16
    			b = b00 + b16
    			a*b = (a00 + a16)(b00 + b16)
    				= a00b00 + a00b16 + a16b00 + a16b16
  
    			a16b16 overflows the 32bits
    		 */
       var xlsw = (x & 0xFFFF)
       var xmsw = (x >> 16) +(xlsw >> 16);
       var ylsw = (y & 0xFFFF)
       var ymsw = (y >> 16) +(ylsw >> 16);
    		var a16 = xmsw
    		var a00 = xlsw
    		var b16 = ymsw
    		var b00 = ylsw
    		var c16, c00
    		c00 = a00 * b00
    		c16 = c00 >>> 16
  
    		c16 += a16 * b00
    		c16 &= 0xFFFF		// Not required but improves performance
    		c16 += a00 * b16
  
    		xlsw = c00 & 0xFFFF
    		xmsw= c16 & 0xFFFF
  
    		return (xmsw << 16) | (xlsw & 0xFFFF)
    	}
docs: /*
  1000 0000
  1000 0000
  0000 0001