@@ 29-49 (lines=21) @@ | ||
26 | } |
|
27 | ||
28 | // Divide two uint128 values |
|
29 | var divideu128 = function(value) { |
|
30 | var DIVISOR = Long.fromNumber(1000 * 1000 * 1000); |
|
31 | var _rem = Long.fromNumber(0); |
|
32 | var i = 0; |
|
33 | ||
34 | if(!value.parts[0] && !value.parts[1] && |
|
35 | !value.parts[2] && !value.parts[3]) { |
|
36 | return { quotient: value, rem: _rem }; |
|
37 | } |
|
38 | ||
39 | for(var i = 0; i <= 3; i++) { |
|
40 | // Adjust remainder to match value of next dividend |
|
41 | _rem = _rem.shiftLeft(32); |
|
42 | // Add the divided to _rem |
|
43 | _rem = _rem.add(new Long(value.parts[i], 0)); |
|
44 | value.parts[i] = _rem.div(DIVISOR).low_; |
|
45 | _rem = _rem.modulo(DIVISOR); |
|
46 | } |
|
47 | ||
48 | return { quotient: value, rem: _rem }; |
|
49 | } |
|
50 | ||
51 | // Multiply two Long values and return the 128 bit value |
|
52 | var multiply64x2 = function(left, right) { |
@@ 13145-13164 (lines=20) @@ | ||
13142 | }; |
|
13143 | ||
13144 | // Divide two uint128 values |
|
13145 | var divideu128 = function (value) { |
|
13146 | var DIVISOR = Long.fromNumber(1000 * 1000 * 1000); |
|
13147 | var _rem = Long.fromNumber(0); |
|
13148 | var i = 0; |
|
13149 | ||
13150 | if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { |
|
13151 | return { quotient: value, rem: _rem }; |
|
13152 | } |
|
13153 | ||
13154 | for (var i = 0; i <= 3; i++) { |
|
13155 | // Adjust remainder to match value of next dividend |
|
13156 | _rem = _rem.shiftLeft(32); |
|
13157 | // Add the divided to _rem |
|
13158 | _rem = _rem.add(new Long(value.parts[i], 0)); |
|
13159 | value.parts[i] = _rem.div(DIVISOR).low_; |
|
13160 | _rem = _rem.modulo(DIVISOR); |
|
13161 | } |
|
13162 | ||
13163 | return { quotient: value, rem: _rem }; |
|
13164 | }; |
|
13165 | ||
13166 | // Multiply two Long values and return the 128 bit value |
|
13167 | var multiply64x2 = function (left, right) { |