# rational.js vs fraction.js vs ratio.js - subtract, multiply, add, divide

## JavaScript performance comparison

Revision 14 of this test case created

## Info

Comparing the performance of various rational number libraries for basic arithmetic

## Preparation code

<script src="http://acerix.github.com/rational.js/releases/rationaljs.alpha.js">
</script>
<script src="https://rawgithub.com/ekg/fraction.js/master/fraction.js"></script>
<script src="https://rawgithub.com/LarryBattle/Ratio.js/master/lib/Ratio-0.4.0.min.js"></script>
<script src="http://blog.livedoor.jp/dankogai/js/rational.txt"></script>
<script>
Benchmark.prototype.setup = function() {
var test_cases = [
[3466463461, 134534331],
[12312337, 334534535],
[3453453, 3653450],
[53453453411, 365340],
[123453453, 3653453450],
[-173646341, 36345340],
[245345213, 2353523],
[212151121, 234234666],
[234235535, 234234666],
[-656755537, 65676767]
];

var float_1 = 1 / 10;
var float_2 = 111 / 3;

var rat_1 = rat.fromValues(1, 10);
var rat_2 = rat.fromValues(111, 3);

var bigrat_1 = bigrat.fromValues(1, 10);
var bigrat_2 = bigrat.fromValues(111, 3);

var rational_1 = new rational(1, 10);
var rational_2 = new rational(111, 3);

var ratio_1 = Ratio(1, 10);
var ratio_2 = Ratio(111, 3);

var frac_1 = new Fraction(1, 10);
var frac_2 = new Fraction(111, 3);
};
</script>

## Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
floats
for (var i in test_cases) {
float_1 = test_cases[i][0] / test_cases[i][1];
float_2 = ((float_2 - float_1) * float_1 + float_1) / float_1;
}
pending…
rational.js - rat
for (var i in test_cases) {
rat.set(rat_1, test_cases[i][0], test_cases[i][1]);
rat.subtract(rat_2, rat_2, rat_1);
rat.multiply(rat_2, rat_2, rat_1);
rat.divide(rat_2, rat_2, rat_1);
}
pending…
fraction.js
for (var i in test_cases) {
frac_1 = new Fraction(test_cases[i][0], test_cases[i][1]);
}
pending…
Ratio.js
for (var i in test_cases) {
ratio_1 = Ratio(test_cases[i][0], test_cases[i][1]);
}
pending…
Ratio.js - only simplify once
for (var i in test_cases) {
ratio_1 = Ratio(test_cases[i][0], test_cases[i][1]);
}
pending…
rational.js - bigrat (arbitrary size)
for (var i in test_cases) {
bigrat_1 = bigrat.fromValues(test_cases[i][0], test_cases[i][1]);
bigrat.subtract(bigrat_2, bigrat_2, bigrat_1);
bigrat.multiply(bigrat_2, bigrat_2, bigrat_1);
bigrat.divide(bigrat_2, bigrat_2, bigrat_1);
}
pending…
rational.js - rational (chainable)
for (var i in test_cases) {
rational_1 = new rational(test_cases[i][0], test_cases[i][1]);
}
pending…
Ratio.js - no call to simplify
for (var i in test_cases) {
ratio_1 = Ratio(test_cases[i][0], test_cases[i][1]);
}
pending…

## Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page: