100! richiede 525 bit per essere rappresentato come intero; risultato è un double, e i double hanno una mantissa di 53 bit (52 espliciti + 1 implicito); questo significa che da 2^54 in poi i double non hanno più la granularità adeguata per rappresentare tutti gli interi.
Ora, la cosa per i fattoriali è un po' più complicata (dato che si tratta di numeri che hanno "dentro la pancia" un sacco di fattori due, che quindi vanno a finire nell'esponente, non nella mantissa), ma in ogni caso arriva un punto in cui la mantissa non basta più. Qui avevo fatto il conto per i long double (che, sulle piattaforme su cui sono supportati, in genere sono 80 bit, di cui 64 di mantissa; per i double "normali" il conto è simile sistemando i numeri), e salta fuori che anche lì da 26! in poi non c'è più precisione a sufficienza.
Long story short, con l'approccio naïf e i tipi "normali" non te la cavi...