]> git.wincent.com - hextrapolate.git/blob - src/addDigits.js
27d998ec93860ed0ba4eede1ed47b9facd00998c
[hextrapolate.git] / src / addDigits.js
1 /**
2  * Copyright 2015-present Greg Hurrell. All rights reserved.
3  * Licensed under the terms of the MIT license.
4  *
5  * @flow
6  */
7
8 'use strict';
9
10 export default function addDigits(
11   aDigits: Array<number>,
12   bDigits: Array<number>,
13   base: number
14 ): Array<number> {
15   let result = [];
16   let carry = 0;
17   for (let i = 0; i < aDigits.length || i < bDigits.length || carry; i++) {
18     const aDigit = i < aDigits.length ? aDigits[i] : 0;
19     const bDigit = i < bDigits.length ? bDigits[i] : 0;
20     const sum = aDigit + bDigit + carry;
21     result.push(sum % base);
22
23     // ~~ here is the equivalent of Math.floor; used to avoid V8 de-opt,
24     // "Reference to a variable which requires dynamic lookup".
25     carry = ~~(sum / base);
26   }
27   return result.length ? result : [0];
28 }