Home Manual Reference Source Test Repository

src/0-legacy/arithmetic/add/add.js


/**
 * @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;
		}

	};
}