Algorithm to convert any real number into a continued fraction

383 Views Asked by At

I'm looking for an algorithm that wolframalpha uses to convert any real number into a continued fraction. See the following examples:

https://www.wolframalpha.com/input/?i=Continued+fraction+199111377%2F60034339 https://www.wolframalpha.com/input/?i=continued+fraction+sqrt(11)

What I've been trying so far is a function written in PHP (apologies for the variable naming and formatting) that converts any rational value into a Continued fraction. However, if I pass an irrational value into the function it returns the result for the nearest rational.

Here is the function code:

function solve($g) {
    for ($i = 1; $i < 1000000; $i++) {
        if (abs($i * $g - round($i * $g)) < 0.000001) {
            $numerator = round($g * $i);
            $denominator = $i;
            break;
        }
    }

    if ($numerator > $denominator) {
        $ratio = (int)($numerator / $denominator);
        $mod = $numerator % $denominator;
        $numerator = $denominator;
        $denominator = $mod;
        echo ('[' . $ratio . ';');
        $s = 1;
    } else {
        $c = $numerator;
        $numerator = $denominator;
        $denominator = $c;
        $ratio = (int)($numerator / $denominator);
        $mod = $numerator % $denominator;
        $numerator = $denominator;
        $denominator = $mod;
        echo ('[0;' . $ratio . ',');
        $s = 2;
    }

    while ($numerator % $denominator > 0) {
        $ratio = (int)($numerator / $denominator);
        $mod = $numerator % $denominator;
        $numerator = $denominator;
        $denominator = $mod;
        $s++;
        echo ($ratio . ',');
    }

    echo ($numerator / $denominator);
    echo (']');
}

The function is called as solve(sqrt(11));