A collection of static, low-level arithmetic functions that operate directly on Vector<Int> representations of large numbers.

Static methods

staticadd(result:Vector<Int>, operand1:Vector<Int>, operand2:Vector<Int>, length:Int):Int

Add big integer operand2 to big integer operand1 and put the result into big integer result.

Ok for result, operand1, and operand2 to be the same object.

Returns the "carry" value of either 0 or 1.

staticarithmeticShiftRight(result:Vector<Int>, input:Vector<Int>, length:Int, shift:Int):Void

Shift multiword integer input right by shift binary places and store the result in result, with the high bit duplicated for bits inserted from the left.

shift must meet the critera 0 <= shift < 32.

result and input may be the same object.

staticcompareSigned(a:Vector<Int>, b:Vector<Int>, length:Int):Int

Compare two signed multiword integers.

Returns -1 if a < b; otherwise returns 1 if a > b; otherwise returns 0 (a == b).

staticcompareUnsigned(a:Vector<Int>, b:Vector<Int>, length:Int):Int

Compare two unsigned multiword integers.

Returns -1 if a < b; otherwise returns 1 if a > b; otherwise returns 0 (a == b).

staticcopy(dest:Vector<Int>, source:Vector<Int>, length:Int):Void

Copies words from one vector to another.

Parameters:

dest

The destination vector.

source

The source vector.

length

The number of words to copy.

staticdivideIntUnsigned(dividend:Vector<Int>, dividendLength:Int, divisor:Int, quotientOut:Vector<Int>, work:Vector<Int>):Int

Divide dividend by divisor, where both are unsigned. The quotient of the division is put into quotientOut; the remainder is the return value.

quotientOut must have length >= dividendLength.

quotientOut may refer to dividend.

work must not refer to any of the inputs, and must have length >= dividendLength + 2.

dividend is not modified, unless it refers to quotientOut.

The results are unspecified if divisor is negative.

staticdivideUnsigned(dividend:Vector<Int>, dividendLength:Int, divisor:Vector<Int>, divisorLength:Int, quotientOut:Vector<Int>, remainderOut:Vector<Int>, work:Vector<Int>):Void

Divide dividend by divisor, where both are unsigned. The quotient of the division is put into quotientOut; the remainder is put into remainderOut.

divisor must not have any leading zeros.

quotientOut must have length >= dividendLength - divisorLength + 1.

remainderOut may be null if the remainder value is not needed. If supplied, it must be of length >= divisorLength.

quotientOut and remainderOut must not refer to the same object; but either may refer to the inputs.

dividend and divisor may refer to the same object.

work must not refer to any of the inputs, and must have length >= dividendLength + divisorLength + 1.

dividend and divisor are not modified, unless they reference one of the outputs.

staticextendUnsigned(result:Vector<Int>, resultLength:Int, input:Vector<Int>, inputLength:Int):Void

Perform unsigned (zero) extension of input into result. input and result may refer to the same object.

Parameters:

result

The destination vector.

resultLength

The desired length of the result.

input

The source vector.

inputLength

The length of the input.

staticgetBitSigned(value:Vector<Int>, length:Int, index:Int):Int

Gets the value of a single bit from a signed multi-word integer.

Parameters:

value

The source vector.

length

The number of words.

index

The index of the bit to get.

Returns:

1 if the bit is set, 0 otherwise.

staticinlinegetDivisionQuotientLengthUnsigned(dividendLength:Int, divisorLength:Int):Int

Calculates the required length for the quotient of an unsigned division.

Parameters:

dividendLength

The length of the dividend.

divisorLength

The length of the divisor.

Returns:

The length of the quotient.

staticgetLengthUnsigned(value:Vector<Int>, length:Int):Int

Gets the effective length of an unsigned multi-word integer, ignoring leading zeros.

Parameters:

value

The vector of integer words.

length

The number of words in the value.

Returns:

The minimal number of words needed to represent the value.

staticinlineisNegative(value:Vector<Int>, length:Int):Bool

Checks if a multi-word integer is negative.

Parameters:

value

The vector of integer words.

length

The number of words in the value.

Returns:

true if the most significant bit is set.

staticisZero(value:Vector<Int>, length:Int):Bool

Checks if a multi-word integer is zero.

Parameters:

value

The vector of integer words.

length

The number of words in the value.

Returns:

true if the value is zero.

staticlogicalShiftRight(result:Vector<Int>, input:Vector<Int>, length:Int, shift:Int):Void

Shift multiword integer input right by shift binary places and store the result in result, with zeros inserted from the left.

shift must meet the critera 0 <= shift < 32.

result and input may be the same object.

staticmultiplyIntUnsigned(result:Vector<Int>, operand1:Vector<Int>, operand1Length:Int, operand2:Int):Void

Multiply operand1 by operand2, where both are unsigned, and put the result into result.

result must have length >= operand1Length + 1.

result may not refer the same object as either operand1 or operand2; however, operand1 and operand2 may be the same object.

staticmultiplyUnsigned(result:Vector<Int>, operand1:Vector<Int>, operand1Length:Int, operand2:Vector<Int>, operand2Length:Int):Void

Multiply operand1 by operand2, where both are unsigned, and put the result into result.

result must have length >= operand1Length + operand2Length.

result may not refer the same object as either operand1 or operand2; however, operand1 and operand2 may be the same object.

staticnegate(result:Vector<Int>, operand:Vector<Int>, length:Int):Bool

Perform the unary negation of big integer operand and put the result into big integer result.

Parameters:

result

The vector to store the result.

operand

The vector to negate.

length

The number of words.

Returns:

true if the operation overflowed; false otherwise. Ok for result and operand to be the same object.

staticsetFromHexUnsigned(dest:Vector<Int>, length:Int, value:String):Bool

Sets a multi-word integer from an unsigned hexadecimal string.

Parameters:

dest

The destination vector.

length

The length of the destination.

value

The hexadecimal string.

Returns:

true on success.

staticsetFromIntUnsigned(dest:Vector<Int>, length:Int, value:Int):Void

Sets a multi-word integer from a single unsigned Int.

Parameters:

dest

The destination vector.

length

The total length of the destination.

value

The integer value to set.

staticsetZero(dest:Vector<Int>, length:Int):Void

Fills a vector with zeros.

Parameters:

dest

The destination vector.

length

The number of words to zero out.

staticshiftLeft(result:Vector<Int>, input:Vector<Int>, length:Int, shift:Int):Void

Shift multiword integer input left by shift binary places and store the result in result, with zeros inserted from the right.

shift must meet the critera 0 <= shift < 32.

result and input may be the same object.

staticsubtract(result:Vector<Int>, operand1:Vector<Int>, operand2:Vector<Int>, length:Int):Int

Subtract big integer operand2 from big integer operand1 and put the result into big integer result.

Ok for result, operand1, and operand2 to be the same object.

Returns the "borrow" value of either 0 or 1.

statictoBaseString(value:Vector<Int32>, length:Int, radix:Int):String

Converts a signed multi-word integer to a string in the specified base.

Parameters:

value

The source vector.

length

The number of words.

radix

The base for the conversion.

Returns:

The string representation.

statictoDecimalSigned(value:Vector<Int>, length:Int):String

Get the value in decimal form.

statictoDecimalUnsigned(value:Vector<Int>, length:Int):String

Get the value in decimal form.

statictoHex(input:Vector<Int>, length:Int):String

Converts a multi-word integer to a hexadecimal string.

Parameters:

input

The source vector.

length

The number of words.

Returns:

The hexadecimal string representation.