#!/usr/bin/perl -w # NO license really, it is just an algorithm # to simplify a fraction / find the closest fractionnal form use strict; sub fractionizer($){ my $nb = $_[0]; if($nb =~ /([\d\.]+)\/([\d\.]+)/){ $nb = $1 / $2; } my $num = int($nb); my $den = 1; my $oldNum =1; my $oldDen = 0; my $newNum; my $newDen; my $f = $nb; my $g=$num; while(abs($num/$den - $nb) > 1E-8){ $f = 1 / ($f - $g); $g = int($f); $newNum = $g*$num + $oldNum; $newDen = $g*$den + $oldDen; $oldNum = $num; $oldDen =$den; $num = $newNum; $den = $newDen; } if($den != 1){ return $num."/".$den; } else { return $num; } } while(<>){ chop; print " $_ = ".fractionizer($_)."\n"; } exit;