I think I have a simpler test case:use Math::BigFloat;
my $one_minus_one = Math::BigInt->new(1) - Math::BigFloat->new(.9999);
print "$one_minus_one\n";
looking at the docs, BigInts are supposed to be upgraded to BigFloats if you use 'use bignum'. The $e is upgraded to a BigFloat, but it is first instantiated as a BigInt, and since is is slightly less than zero, it is instantiated as zero (Note: exp() returns an unblessed regular scalar value slightly less than one). Here is an better test case:
#!perl
use bignum;
my $tmp = "-0.00000000000000007573064690121714";
my $e = exp($tmp);
printf("%3.20g\n", $e);
print "$e ", 1-$e, "\n";