18 lines
		
	
	
		
			499 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
		
			499 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint no-bitwise: "off" */
 | 
						|
 | 
						|
// Thanks: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference
 | 
						|
//         /Global_Objects/Math/imul
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
module.exports = function (val1, val2) {
 | 
						|
	var xh = (val1 >>> 16) & 0xffff
 | 
						|
	  , xl = val1 & 0xffff
 | 
						|
	  , yh = (val2 >>> 16) & 0xffff
 | 
						|
	  , yl = val2 & 0xffff;
 | 
						|
 | 
						|
	// The shift by 0 fixes the sign on the high part
 | 
						|
	// the final |0 converts the unsigned value into a signed value
 | 
						|
	return (xl * yl + (((xh * yl + xl * yh) << 16) >>> 0)) | 0;
 | 
						|
};
 |