in reply to Arithmetic with fractions
But that isn't sufficient if you need to preserve the fractional values. Floating point will introduce some round-off error. For instance, adding 1/6 six times may not get you 1:$num = "6/2"; # like this $num =~ s:^(\d+)/(\d+)\z:$1/$2:e; # or my ($n,$d) = split "/", $num; $num = $n/$d; # or (unsafe for untrusted input) $num = eval $num;
Math::BigRat (which I've never actually used) is a core module to handle this for you.$ perl -we'print "not equal" if 1/6 + 1/6 + 1/6 + 1/6 + 1/6 != 1' not equal
$ perl -we'use Math::BigRat; $onesixth = Math::BigRat->new("1/6"); > print "equal" if $onesixth+$onesixth+$onesixth+$onesixth+$onesixth+ > $onesixth == 1' equal
|
|---|