# Fractional part of exp(x)

I have a real number $x$ (for concreteness, say $10^4<x<10^6$) and would like to find $e^x-\lfloor e^x\rfloor$ to reasonable precision (10-20 decimal places). What is the most efficient method?

Computing $e^x$ directly in an arbitrary-precision library works but this requires a lot of storage space (and hence time) to store digits that I just throw away. Is there a better approach?

Edit: If it would help I have $x=y+n$ where $y$ is fixed throughout all my calculations (an easily-computed real constant) and $n\in\mathbb{Z}.$ I'd like to do the calculation for a million values of $n$, give or take.

-
I'd guess you mean $\exp(x)-\lfloor \exp(x) \rfloor$? –  DoomMuffins Jan 20 '13 at 19:54
@DoomMuffins: Oops, yes. –  Charles Jan 20 '13 at 20:16
If $x\approx 10^4$ and you want to know $\exp x-\lfloor\exp x\rfloor$ to $10$ decimal places, then you'll have to know $x$ to over $4000$ decimal places. –  Rahul Jan 20 '13 at 20:16
@RahulNarain: I do. –  Charles Jan 20 '13 at 20:17
If the 4000th decimal digit of $x$ is significant, it would seem implausible that you could manage the calculation without 4000 digits of precision. –  Hurkyl Jan 20 '13 at 20:26

It entirely depends on why this is important and how many values of $x$ are in question. All numerical methods are context dependent.
In contrast, if the polynomial has integer coefficients, one may rewrite it as a finite Taylor series around a chosen integer point $n.$ If $|x-n| < 1,$ or better $|x-n| \leq \frac{1}{2}$ by rounding, we now get quite wonderful precision for the polynomial.
The bad news is that the strictly analogous procedure is to save an impossible number of values of $\log m$ for integers $e^{10^4} < m < e^{10^6}.$