This commit is contained in:
54
node_modules/fraction.js/examples/approx.js
generated
vendored
Normal file
54
node_modules/fraction.js/examples/approx.js
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
Fraction.js v5.0.0 10/1/2024
|
||||
https://raw.org/article/rational-numbers-in-javascript/
|
||||
|
||||
Copyright (c) 2024, Robert Eisele (https://raw.org/)
|
||||
Licensed under the MIT license.
|
||||
*/
|
||||
const Fraction = require('fraction.js');
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user