UNPKG

big-rational

Version:

An arbitrary length rational number library for Javascript

318 lines (220 loc) 7.83 kB
BigRational.js ========= **BigRational.js** is an arbitrary-length rational number library for Javascript, allowing arithmetic operations on rational numbers of unlimited size, notwithstanding memory and time limitations. A *rational number* is stored internally as a pair of two big integers. Because of this, BigRational.js depends on my big integer library, [BigInteger.js](https://github.com/peterolson/BigInteger.js). Installation --- If you are using a browser, you can download [BigRational.js from GitHub](http://peterolson.github.com/BigRational.js/BigInt_BigRat.min.js) or just hotlink to it. <script src="http://peterolson.github.com/BigRational.js/BigInt_BigRat.min.js"></script> This will include both the `bigInt` library and the `bigRat` library. If you want to reference them separately, you can use the [non-combined BigRational.js script](http://peterolson.github.com/BigRational.js/BigRational.min.js). If you are using node, you can install BigRational.js with [npm](https://npmjs.org/). npm install big-rational Then you can include it in your code var bigRat = require("big-rational"); `bigRat(num?, denom?)` --- You can create a bigRational by calling the `bigRat` function. You can pass in up to two paramers. **`bigRat()`** If you pass in zero parameters, it will return zero. **`bigRat(n)`** If you pass in one parameter, it must be one of the following: - a string, which may be - an integer, such as `"12345"`, - a numerator over a denominator, such as `"2/3"`, - a mixed fraction, such as `"1_1/2"` - a decimal number, such as `"54.05446"` - a Javascript number - a bigInteger - a bigRational **`bigRat(num, denom)`** If you pass in two parameters, the first will be interpreted as the numerator, and the second as the denominator. Both parameters must be one of the following: - a string in integer form, such as `"12345"` - a JavaScript number that is an integer, such as `12345` - a bigInteger **Examples:** var zero = bigRat(); var threeFourths = bigRat("3/4") || bigRat("3", "4") || bigRat(3, 4) || bigRat(3 / 4) || bigRat(0.75); var fiveHalves = bigRat("5/2") || bigRat("2_1/2"); Method Chaining --- Note that bigRat operations return bigRats, which allows you to chain methods, for example: var salary = bigRat(dollarsPerHour).times(hoursWorked).plus(randomBonuses) Constants --- There are three constants already stored that you do not have to construct with the `bigRat` function yourself: - `bigRat.one`, equivalent to `bigRat(1)` - `bigRat.zero`, equivalent to `bigRat(0)` - `bigRat.minusOne`, equivalent to `bigRat(-1)` Properties === You can obtain the numerator and denominator of a bigRational with these properties: `numerator` --- Returns the numerator of a bigRational. This will be a bigInt. - `bigRat(34, 3).numerator` => `bigInt(34)` `denominator` --- Returns the denominator of a bigRational. This will be a bigInt. - `bigRat(34, 3).denominator` => `bigInt(3)` `num` --- Alias for the `numerator` property `denom` --- Alias for the `denominator` property Methods === `abs` --- Returns the absolute value of a number. - `bigRat(-424).abs().equals(424)` `add` --- Performs addition. - `bigRat("1/3").add(1, 3).equals(2, 3)` `ceil(toBigInt?)` --- Rounds up to the nearest integer. If the `toBigInt` argument is `true`, then it will return a bigInteger instead of a bigRational. - `bigRat(12345.4).ceil().equals(12346)` `compareAbs` --- Performs a comparison between the absolute values of two numbers. If the numbers are of equal magnitude, it returns `0`. If the first number is of greater magnitude, it returns `1`. Otherwise, it returns `-1`. - `bigRat(-3).compareAbs(3) === 0` - `bigRat(3).compareAbs(-4) === -1` - `bigRat(-4).compareAbs(3) === 1` `compare` --- Performs a comparison between two numbers. If the numbers are equal, it returns `0`. If the first number is greater, it returns `1`. If the first number is lesser, it returns `-1`. - `bigRat(3).compare(3) === 0` - `bigRat(3).compare(4) === -1` - `bigRat(4).compare(3) === 1` `compareTo` --- Alias for the `compare` function. `divide` --- Performs division. - `bigRat("354.25").divide(1, 4).equals(1417)` `eq` --- Alias for the `equals` function. `equals` --- Checks if two numbers are equal. - `bigRat(1).equals(1)` `floor(toBigInt?)` --- Rounds down to the nearest integer. If the `toBigInt` argument is `true`, then it will return a bigInteger instead of a bigRational. - `bigRat(987.99999).floor().equals(987)` `geq` --- Alias for the `greaterOrEquals` function. `greater` --- Checks if the first number is greater than the second - `bigRat(5).greater(4)` `greaterOrEquals` --- Checks if the first number is greater than or equal to the second - `bigRat(5).greaterOrEquals(5)` - `bigRat(5).greaterOrEquals(4)` `gt` --- Alias for the `greater` function. `isNegative` --- Returns `true` if the number is negative, `false` otherwise. - `bigRat(-7).isNegative()` `isPositive` --- Returns `true` if the number is positive, `false` otherwise. - `bigRat(7).isPositive()` `isZero` --- Returns `true` if the number equals 0, `false` otherwise. - `bigRat(0).isZero()` `lesser` --- Checks if the first number is lesser than the second - `bigRat(4).lesser(5)` `lesserOrEquals` --- Checks if the first number is lesser than or equal to the second - `bigRat(4).lesserOrEquals(4)` - `bigRat(4).lesserOrEquals(5)` `leq` --- Alias for the `lesserOrEquals` function. `lt` --- Alias for the `lesser` function. `minus` --- Alias for `subtract`. `mod` --- Performs the modulo operation. - `bigRat(3).mod(2).equals(1)` `multiply` --- Performs multiplication. - `bigRat(70, 2).multiply(4).equals(140)` `negate` --- Returns the negation of a number. - `bigRat(234).negate().equals(-234)` `neq` --- Alias for the `notEquals` function. `notEquals` --- Checks if two numbers are not equal. - `bigRat(1).notEquals(2)` `over` --- Alias for `divide`. `plus` --- Alias for `add`. `pow` --- Performs exponentiation. The argument will be parsed as a bigInt. - `bigRat("3/2").pow(3)` => `bigRat("27/8")` `reciprocate` --- Returns the reciprocal of a number. - `bigRat("3/2").reciprocate()` => `bigRat("2/3")` `round(toBigInt?)` --- Rounds a number to the nearest integer. If the number is exactly half-way between two integers, it will round up. If the `toBigInt` argument is `true`, then it will return a bigInteger instead of a bigRational. - `bigRat(54345.12566).round().equals(54345)` - `bigRat(1234567.5).round().equals(1234568)` - `bigRat(69.8).round().equals(70)` `subtract` --- Performs subtraction. - `bigRat(3).subtract(2).equals(1)` `times` --- Alias for `multiply`. `toDecimal(digits?)` --- Converts a bigRational to a string in decimal notation, cut off after the number of digits specified in the `digits` argument. The default number of digits is 10. - `bigRat(1,3).toDecimal() === "0.33333333333"` - `bigRat(1,7).toDecimal(14) === "0.14285714285714"` Override Methods === `toString()` --- Converts a bigRat to a string in "numerator/denominator" notation. - `bigRat(145.545).toString() === "29109/200"` `valueOf()` --- Converts a bigRat to a native Javascript number. This override allows you to use native arithmetic operators without explicit conversion: - `bigRat(1, 4) + bigRat(3, 4) === 1`