Je suis en train de mettre en œuvre un programme C qui calcule la factoriel d'un n très grand nombre (jusqu'à un million), en utilisant fft et méthode de fractionnement binaire.factoriel utilisant FFT
J'ai implémenté une bibliothèque simple pour représenter entier arbitraire de précision. Pour calculer le tout se passe bien, fft et IFFT, j'utilise twofft.c et four1.c routines de "Recettes numériques en C"
Jusqu'à un certain n, mais Lorsque les nombres (tableaux flottants) sont trop grands, le ifft (calculer avec quatre1), après normalisation et arrondi, a des valeurs qui sont fausses.
Par exemple, si j'ai deux nombres avec 2000 chiffres qui se termine avec 40 zéros, et je dois les multiplier l'autre (en utilisant fft), quand je calcule la IFFT, des zéros qui se terminent devenir « un ». cela se produit parce que lorsque j'ai arrondi un de ces "zéros", (0,50009 pour des exemples), ils sont devenus "un". Maintenant, je ne sais pas si ma mise en œuvre est fausse ou si je dois arrondir ce numebrs d'une manière différente. J'ai essayé d'utiliser les deux méthode split binaire et factorisation, mais pour n> = 9000, le résultat est mauvais .
existe un moyen de résoudre ce problème? merci pour votre attention et désolé pour mon mauvais anglais.
Veuillez formater correctement votre question! Et à part cela, 'C' n'est pas capable de gérer de tels nombres. –
Veuillez publier un exemple de code minimal illustrant votre problème. –
@ bash.d: OP a clairement indiqué qu'il a implémenté et utilise une bibliothèque d'entiers de précision arbitraire pour la tâche en cours. – datenwolf