aureooms/js-integer-little-endian

View on GitHub
src/0-legacy/arithmetic/add/add.js

Summary

Maintainability
A
0 mins
Test Coverage

/**
 * @param {int} r base (radix)
 */


export function badd_t (r) {


    /**
     * Adds two big endian arrays, k >= i >= j
     * wraps
     *
     * @param {array} a first operand
     * @param {int} i0 a left
     * @param {int} i1 a right
     * @param {array} b second operand
     * @param {int} j0 b left
     * @param {int} j1 b right
     * @param {array} c result, must be 0 initialized
     * @param {int} k0 c left
     * @param {int} k1 c right
     */

    return function(a, i0, i1, b, j0, j1, c, k0, k1){
        var t, C = 0;

        while(--j1 >= j0){
            --i1; --k1;
            t = a[i1] + b[j1] + C;
            c[k1] = t % r;
            C = t / r >= 1;
        }

        while(--i1 >= i0){
            --k1;
            t = a[i1] + C;
            c[k1] = t % r;
            C = t / r >= 1;
        }

        if(--k1 >= k0){
            c[k1] = +C;
        }

    };

}


/**
 * @param {int} r base (radix)
 */

export function ladd_t(r){

    /**
     * Adds two little endian arrays, k >= i >= j
     * wraps
     *
     * @param {array} a first operand
     * @param {int} i0 a left
     * @param {int} i1 a right
     * @param {array} b second operand
     * @param {int} j0 b left
     * @param {int} j1 b right
     * @param {array} c result, must be 0 initialized
     * @param {int} k0 c left
     * @param {int} k1 c right
     */

    return function(a, i0, i1, b, j0, j1, c, k0, k1){
        var t, C = 0;

        while(j0 < j1){
            t = a[i0] + b[j0] + C;
            c[k0] = t % r;
            C = t / r >= 1;
            ++i0; ++j0; ++k0;
        }

        while(i0 < i1){
            t = a[i0] + C;
            c[k0] = t % r;
            C = t / r >= 1;
            ++i0; ++k0;
        }

        if(k0 < k1){
            c[k0] = +C;
        }

    };
}