/** * @license Fraction.js v2.7.0 01/06/2015 * http://www.xarg.org/2014/03/rational-numbers-in-javascript/ * * Copyright (c) 2015, Robert Eisele (robert@xarg.org) * Dual licensed under the MIT or GPL Version 2 licenses. **/ // Another rational approximation, not using Farey Sequences but Binary Search using the mediant function approximate(p, precision) { var num1 = Math.floor(p); var den1 = 1; var num2 = num1 + 1; var den2 = 1; if (p !== num1) { while (den1 <= precision && den2 <= precision) { var m = (num1 + num2) / (den1 + den2); if (p === m) { if (den1 + den2 <= precision) { den1 += den2; num1 += num2; den2 = precision + 1; } else if (den1 > den2) { den2 = precision + 1; } else { den1 = precision + 1; } break; } else if (p < m) { num2 += num1; den2 += den1; } else { num1 += num2; den1 += den2; } } } if (den1 > precision) { den1 = den2; num1 = num2; } return new Fraction(num1, den1); }