Быстрый способ исправить плавающие точки - использовать bignum . Просто добавьте строку
use bignum;
в начало вашего скрипта. Очевидно, что последствия для производительности очевидны, поэтому это не может быть хорошим решением для вас.
Более локализованное решение заключается в том, чтобы явно использовать Math :: BigFloat , где вам нужна более высокая точность.