This is just a guess based on my knowledge of C and how it treats mathematical terms, but...
is the culprit. While $e is a BigFloat, my guess would be that the result of the division of 1 and $fac would be a number of the same type as $fac. Thus while $e supports arbitrary precision, 1 / $fac does not support such a high precision