use warnings;
use strict;
my $number = shift;
my $error = $number+1;
my $denom = 1;
while ($error) {
my $num = int($number * $denom + .5);
if (abs($num/$denom - $number) < $error) {
$error = abs($num/$denom - $number);
print "$num/$denom\t\terr=$error\n";
}
exit if ++$denom > 999;
}
####
$ perl fract.pl 3.14159265358979323
3/1 err=0.141592653589793
13/4 err=0.108407346410207
16/5 err=0.0584073464102071
19/6 err=0.0250740130768734
22/7 err=0.00126448926734968
179/57 err=0.00124177639681067
201/64 err=0.000967653589793116
223/71 err=0.000747583167258092
245/78 err=0.000567012564152147
267/85 err=0.000416183001557879
289/92 err=0.000288305763706198
311/99 err=0.000178512175651679
333/106 err=8.32196275291075e-05
355/113 err=2.66764189404967e-07
####
52163/16604 err=2.66213257216208e-07