Mes factorielles sont fausses

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Mes factorielles sont fausses

Message par Tipoucet »

42.jpg
42.jpg (58.82 Kio) Vu 4805 fois
Bonjour, j'ai remarqué aujourd'hui une chose que je me comprends pas bien.

Quand j'appuie sur la touche factorielle d'une HP-32S, 33S, 42S, 15C, TI-81 et d'autres la valeur affichée me semble tout-à-fait bonne. Mais si je réalise les multiplications moi-même, à la main ou par programme, en commençant du début ou par la fin, ce que je trouve a très souvent un écart minime.

Dans la capture ci-dessus, en haut, c'est mon produit de facteurs patiemment calculé (49!), et en bas, la valeur retournée par la touche factorielle. Le dernier chiffre est différent et c'est le chiffre de la touche qui est bon.

Je me demande ce que fait le micro programme de factorielle que je ne fais pas, pour que nous aboutissions à des résultats différents.
La fonction gamma de la 42S pour 50 donne exactement la même valeur que la touche factorielle. C'est juste mon empilement de multiplications qui est faux. Il n'y a pas de chiffres de garde dans la 42S ... Je bloque :?
Dominique
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1799
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: Mes factorielles sont fausses

Message par destroyedlolo »

Salut,

Je pense que la différence vient du fait que quand tu fais les calculs à la main, il y a des arrondis à chaque itération alors que la fonction factoriel doit utiliser une formule mathématique pour obtenir directement le resultat (plus rapide donc).
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Avatar du membre
pcscote
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 160
Enregistré le : 11 juil. 2018 01:06
Localisation : Québec/Canada

Re: Mes factorielles sont fausses

Message par pcscote »

HP-42S - Owner's Manual, page 3:
The microprocessor has been optimized for fast and reliable computations. The calculator uses 15 digits internally, then rounds to 12 digits for precise results.
HP-42S - Manuel d’utilisation, page 3:
L'optimisation du microprocesseur assure des calculs rapides et fiables sur 15 chiffres de fagon interne (arrondi a 12 chiffres) et des résultats précis.
Sylvain
Calculatrices et Pockets HP > J'ai tous les modèles, manuels, accessoires et périphériques, mes préférés: 41, 71 & 75.
Techno : 41 > 41CL, MLDL2K, Clonix-d, NoV-64d, MAXX | 71 > FRAM71, MultiMod | IL > PIL-Box, PIL-IO, GPIO | ...
casuffitdeschanel
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 650
Enregistré le : 21 sept. 2009 21:56
Localisation : Metz

Re: Mes factorielles sont fausses

Message par casuffitdeschanel »

La fonction factorielle n'utilise t-elle pas une table precalculee?
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

Re: Mes factorielles sont fausses

Message par OlidaBel »

Ta machine a sans doute raison.
Ici calculé dans un programme RPN, la mantisse est suffisante pour ne pas raboter le 34.
Affichage étendu en haut de l'écran (commande SHOW).
fact49-r.JPG
fact49-r.JPG (58.02 Kio) Vu 4775 fois
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Mes factorielles sont fausses

Message par Schraf »

Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: Mes factorielles sont fausses

Message par Tipoucet »

Bonsoir, merci pour vos réponses :)
pcscote a écrit : 07 févr. 2022 04:42 HP-42S - Owner's Manual, page 3:
The microprocessor has been optimized for fast and reliable computations. The calculator uses 15 digits internally, then rounds to 12 digits for precise results.
HP-42S - Manuel d’utilisation, page 3:
L'optimisation du microprocesseur assure des calculs rapides et fiables sur 15 chiffres de fagon interne (arrondi a 12 chiffres) et des résultats précis.
Je ne savais pas pour les 15 chiffres mais ça correspond à l'effet constaté. Donc quand je fais mes multiplications, j'agis toujours sur un nombre précédent qui vient d'être arrondi en interne de 15 à 12 chiffres. Mais comment le micro-programme de factorielle arrive-t-il à échapper à l'étape d'arrondi. Je devrais pouvoir en faire autant à la main, c'est là que je bloque. :?
Dominique
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: Mes factorielles sont fausses

Message par Pocket »

Salut,

C'est peut être par ce que l'algorithme de calcul utilisé n'est pas celui qu'on présuppose : https://en.wikipedia.org/wiki/Factorial#Computation ;)

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Mes factorielles sont fausses

Message par bernouilli92 »

Il faut noter que suivant comment ont fait les calculs, on obtient un résultat différent.
Si on commencer par 2 et qu'on fini par 49, on obtient une valeur plus petite que la bonne valeur.
Mais si on commence par 49 et qu'on fini par 2, on obtient une valeur plus grande.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Helix
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Enregistré le : 13 nov. 2015 18:52
Localisation : 47

Re: Mes factorielles sont fausses

Message par Helix »

Tipoucet a écrit : 07 févr. 2022 19:13 Je ne savais pas pour les 15 chiffres mais ça correspond à l'effet constaté. Donc quand je fais mes multiplications, j'agis toujours sur un nombre précédent qui vient d'être arrondi en interne de 15 à 12 chiffres. Mais comment le micro-programme de factorielle arrive-t-il à échapper à l'étape d'arrondi. Je devrais pouvoir en faire autant à la main, c'est là que je bloque. :?
Je ne vois pas trop pourquoi tu bloques sur ce point, ou alors c'est moi qui ai loupé quelque chose.
Les multiplications se font en interne sur 15 chiffres, et le résultat n'est arrondi à 12 chiffres qu'à la fin.

La HP 42S est programmée en interne en RPL-système, comme les HP48 ou la HP50g. Or en RPL-système, on peut manipuler des nombre de 12 chiffres, ceux accessibles à l'utilisateur, mais aussi des nombres de 15 chiffres, avec les opérations associées. Il suffit donc que la programmation de la factorielle en RPL-système utilise des multiplications sur 15 chiffres pour minimiser l'effet des arrondis.

D'autre part, mais c'est un peu un autre sujet, les calculatrices HP utilisent les mêmes algorithmes mathématiques depuis la HP 71B. Toutes ces calculatrices donnent donc des résultats identiques :
http://www.rskey.org/%7Emwsebastian/miscprj/results.htm
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1799
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: Mes factorielles sont fausses

Message par destroyedlolo »

Helix a écrit : 08 févr. 2022 01:33 Il suffit donc que la programmation de la factorielle en RPL-système utilise des multiplications sur 15 chiffres pour minimiser l'effet des arrondis.
Non, comme je le disais, il serait étonnant qu'elle passe par des multiplications vu que ce n'est pas efficace : elle utilise une formule mathématique (faire une recherche sur google, c'est un grand classique) qui non seulement réduit le nombre de calculs à faire et évite tout ces problèmes d'arrondis.
C'est la même chose pour la grosse majorité des fonctions mathématiques.
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Mes factorielles sont fausses

Message par bernouilli92 »

OlidaBel a écrit : 07 févr. 2022 09:02 Ta machine a sans doute raison.
Ici calculé dans un programme RPN, la mantisse est suffisante pour ne pas raboter le 34.
Affichage étendu en haut de l'écran (commande SHOW).
fact49-r.JPG
Même avec une précision de 34 chiffres, le résulat est faux à partir d'un certain chiffre.
Le bon résultat est 608281864034267560872252163321295376887552831379210240000000000.

Si tu refais le calcul mais dans l'autre sens, tu auras un résulat différent.

La factorielle se calcule effectivement par une formule et la complexité du calcul ne dépend que (très) peu de la valeur d'entrée (sauf dans de rare cas de calculatrice très anciennes).
On peut notamment calculer la factorielle en utilisant la fonction gamma, qui peut être calculée de différentes manières, dont une avec une fonction polynomiale.
Voir ici :
http://www.rskey.org/CMS/index.php/the-library/11
HP, Casio, Sharp, Psion, quelques TI et divers autres
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: Mes factorielles sont fausses

Message par Tipoucet »

Bonjour, merci pour ces échanges riches.
Je reste perplexe sur l'implémentation de développements mathématiques sophistiqués sur de simples calculatrices n'ayant que 10 ou 12 chiffres + une lucarne d'exposant de dix. Ce que je constate c'est que la solution par multiplications successives est loin d'être mauvaise car l'écart que je constate, quand il existe pour une valeur donnée, est toujours minime par rapport à la touche (jamais plus du dernier chiffre significatif). Et dans la vingtaine de machines que j'ai testées récemment, il y a bien proportionnalité entre la hauteur des valeurs et le temps de réponse (modèles plus ou moins récents mais pas antiques). Parfois la rapidité de la machine est telle qu'il faut programmer une succession de centaines ou milliers de calculs identiques (Casio Graph 90, TI NSPIRE) pour le mesurer mais c'est indéniable. Il est possible de prédire à la seconde près le temps de calcul selon la valeur à calculer). J'aime bien l'idée que les 15 chiffres internes de la 42S sont responsables de résultats différents selon que le calcul est manuel ou par micro-programme. Cela voudrait dire que TI et CASIO et d'autres font de même et agissent en interne sur des ressources inaccessibles à l'utilisateur. Pour une précision quasi identique, mais manifestement différente. Une autre idée que j'aime bien est le sens d'où on part pour réaliser les multiplications. J'ai obtenu pour une valeur un écart en partant du bas et zéro en partant du haut. Mais j'avais testé cela aussi au début sur une autre machine et n'avait pas abouti à zéro. Il est possible que des machines très modernes et précises comme la WP 34S ou DM42 (que je n'ai pas) aient recours à des algo plus précis et rapides vu leur fenêtre de réponse. Mais les calculatrices courantes je doute encore. Il me faudrait faire une étude plus complète. Un jour ... Bon weekend :)
Dominique
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Mes factorielles sont fausses

Message par badaze »

Et par divisions successives en partant du résultat final ?
Avec de très grands nombres, un algorithme n’a besoin d’être juste que sur une partie du résultat affiché.
Ainsi, pour 69! avec une calculatrice normale, que les chiffres affichés soient faux à partir du 6ème n’a pas grande importance.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Mes factorielles sont fausses

Message par C.Ret »

badaze a écrit : 12 févr. 2022 10:10Ainsi, pour 69! avec une calculatrice normale, que les chiffres affichés soient faux à partir du 6ème n’a pas grande importance.
Je rejoins entièrement cet avis.
La chose importante est que pour calculer 49! ou 69! à la main, il faut poser sur le papier respectivement 49 et 69 multiplications enchainées dont le produit va très vite faire plusieurs dizaines de chiffres.

Qu'il y ai ou non une petite erreur sur le dernier chiffre de l'affichage de ma calculatrice n'a finalement que très peu d'importance. Ce qui me satisfait pleinement, c'est que je n'ai pas à utiliser une vingtaine de pages de mon block-note et le reste de la semaine à faire les calculs.
Même si ma HP-15C met 5 secondes à calculer une valeur très proche de 49!, c'est infiniment mieux que de le faire à la main !

Sans compter, que je ne suis pas sûr d'être capable de faire trois jours de calculs enchainés sans faire quelque part une erreur et devoir recommencer bientôt… Errare humanum est
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « Tous les Pockets »