If you're looking for more precision you could use GMP. Here's your program rewritten to print 250 decimal digits of precision (which requires about 831 bits of precision). Answer:
2.718281828459045235360287471352662497757247093699 9595749669676277240
76630353547594571382178525166427427466391932003059 9218174135966290435
72900334295260595630738132328627943490763233829880 7531952510190115738
34187930702154089149934884167509244761460668
Code:
// gcc -Wall -W -o e01 e01.c -lgmp
#include <stdio.h>
#include <gmp.h>
#define BITS_PREC 840
int main() {
mpf_t e, one, factorial, toAdd, epsilon;
unsigned long i = 1;
mpf_set_default_prec(BITS_PREC);
mpf_inits(e, one, factorial, toAdd, epsilon, NULL);
mpf_set_ui(e, 1);
mpf_set_ui(one, 1);
mpf_set_ui(factorial, 1);
mpf_set_ui(epsilon, 1);
mpf_div_2exp(epsilon, epsilon, BITS_PREC - 2);
for (;;) {
mpf_div(toAdd, one, factorial);
if (mpf_cmp(toAdd, epsilon) < 0)
break;
mpf_add(e, e, toAdd);
mpf_mul_ui(factorial, factorial, ++i);
}
gmp_printf("%.249Ff\n", e);
mpf_clears(e, one, factorial, toAdd, epsilon, NULL);
return 0;
}