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