CALCULS SUR DES NOMBRES MONSTRUEUX.

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 3 nov. 2006 à 11:59
 Utilisateur anonyme - 20 nov. 2006 à 13:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40193-calculs-sur-des-nombres-monstrueux

Utilisateur anonyme
20 nov. 2006 à 13:54
Arf,
pour trombinoscope c'était pas moi (cette fois) mais Francky
moi je n'ai pas réussi a le faire fonctionner ... (trop honteux je n'ai même rien dis, (écris)) lol

@Japee : encore un scénario a changer ... lol
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 nov. 2006 à 00:41
c'est vrai que parfois on loupe des codes interressants et donc pas de commentaire...
moi j'essaye toujours de revenir sur les "vieux" programmes pour voir si j'ai pas louper quelque chose ou pour poser un opinion.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 nov. 2006 à 18:41
Vexé ? Bah, mais pas du tout... au contraire. Pour ma part, je me suis senti flatté (bon, il se peut que tu n'aies pas eu trop le choix des bobines...)
C'est un réel plaisir de se faire trombinoscoper avec autant de talent !
Vous savez ce qui vous reste à faire, les gars : on va aller mettre un peu d'ambiance sur les codes à Debiars, lol... \o/ ;-)
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
9 nov. 2006 à 17:49
Je me régale toujours autant en lisant les commentaires...
C'est pourquoi je suis un peu déçu du peu de réactions devant le Trombinoscope que j'ai commis (à part Foxi et Cirec qui n'était d'ailleurs pas impliqués dans l'affaire ).

Ou alors, vous aurai-je vexé, les petits ?
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
5 nov. 2006 à 22:39
Le calcul formel (qui peut servir en science plutôt pour la recherche) a besoin de calculs aussi précis et les "calculateurs" en météo travaille avec de grands nombres.

Voilà deux exemples d'application.

Sinon le défit intellectuel gratuit fait du bien en ces temps de compétivité et de rentabilité. Et à bien y réfléchir qu'est-ce qui est vraiement utile ? Moi j'ai une réponse mais qui n'a pas saplace ici...
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
5 nov. 2006 à 22:10
--> Foxi
Après tes commentaires, moins deux points pour avoir pris le problème par le mauvais bout, je trouve que c'est plutôt bienveillant et, perso, j'aurais été moins indulgent. Merci ;)

Une remarque, cependant:
Existe t-il une seule application qui ait besoin de faire des calculs sur des nombres comportant plusieurs milliers de chiffres?
D'un point de vue pratique, il s'agissait de dépasser un peu la capacité du type Cardinal. Donc la course aux performances est un peu vaine, non?
Je ne vois qu'une application pouvant avoir besoin d'une telle débauche de chiffres, c'est la compétition internationnale à trouver les décimales de Pi. Mais je me suis toujours demandé à qui cela pouvait bien être utile, sinon à l'égo de ces chercheurs.

Bref, je ne pense pas revenir sur ce code, sinon, peut-être, pour son aspect formel.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 nov. 2006 à 18:34
mince a confondus ... desolé les gars.

j'ai mis 8, pour la somme de boulot et de reflexion et la qualitée du travail.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 nov. 2006 à 16:07
:))
... Quand je vais dire à ma femme que je nous prépare un week-end bistromathique, elle va se préparer pour la tournée des grands ducs.
'va être déçue, Jeanne...


--> rambc: Merci pour le tuyau. Je ne manquerai d'aller voir ça.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
4 nov. 2006 à 15:53
"sinon jap, tu peu aussi travailler avec le Int64"
Hé, je veux pas travailler, moi !
C'est Cari qui a décidé de se pourrir le week-end avec ses nombres abominables... ^^
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
4 nov. 2006 à 15:29
tout a fait, les calculs reste trés simple.
a savoir que dans une addition de deux nombre de 0 a 9, le nombre de droite maximum obtenus est 8 (voir 8+1 de la somme precedente) et le nombre de gauche maximum obtenus et 1.
ce qui fait qu'on peu facilement calculer de trés grand nombres jusqu'au milliard de milliard de milliard de milliard...

un exemple simple avec la valeurs des bits d'un mots binaire :
1
2 (1+1)
4 (2+2)
8 (4+4)
16 (8+8 = [1] 6)
32 (6+6 [1] 2, 1+1 2 + [1])
64 (2+2 4, 3+3 6)
128 ...
256
512
1024
2048
4096
8192
16384
32768
65536 (8+8, 6+6+[1], 7+7+[1], 2+2+[1], 3+3)
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
etc...

trés facile a faire en calcul mental.
pour les multiplication cela fonctionne de la meme façon, il suffit juste de se rappeler ses tables.
les divisions et soustraction sont un peu plus complexe, ce n'est pas pour rien que ce sont elles qui bouffent le plus de cycles CPU de plus le calcul des divisions se ferat de gauche a droite contrairement a l'addition, soustraction et multiplication qui vont de droite a gauche.

sinon jap, tu peu aussi travailler avec le Int64.

en fait ce que tu as fait la n'est pas tres different de ce qu'on faisait a l'epoque ou on avait des processeurs 8bits ou 16bits.
d'ou l'invension du DWORD (double word, deux mots de 16bits) pour emuler un mots 32bits.
a l'apparition de 32bits, il a fallut emuler des doublelongint (deux mots 32bits) pour emuler le 64bits.
la il faut faire pareil, pour emuler des mots encore plus long.
l'avantage, c'est que on dispose maintenant d'une memoire assé vaste (au moins 128Mo) et donc on peu emuler des mots beaucoup plus longs.
un mots de 512bits etant deja trés trés trés grand...
mais ce systeme ne dispose pas de limite...
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
4 nov. 2006 à 15:26
Dans ce cas, renseignes toi sur l'algo. de multiplication de type Karatsuba (voir ce document que j'ai fait :http://christophe_bal.club.fr/DocPerso-Vulgarisation/Vulgarisation.html).
Pour les calculs de puissance entière regardes ce que j'ai fait en VBA (il y un exemple détaillé) : http://www.vbfrance.com/codes/ALGORITGHME-EFFICACE-CALCUL-PUISSANCE_31388.aspx.

Cordialement.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 nov. 2006 à 13:30
--> Japee
Remets-toi!
Allez, j't'invite à boire un coup au bistromathique du coin...
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 nov. 2006 à 13:24
Je n'ai pas utilisé d'algorithme connu.
Mais le principe des calculs est des plus simples puisque qu'il est du niveau BAC-12, ce qui correspond parfaitement à mon niveau. lol
Je fais les opérations comme si on les faisait à la main, sur un papier. C'est très simple. Mais dans ce code, je ne traite pas ces opérations chiffre par chiffre comme on a l'habitude, mais par groupe de 9 chiffres (puisqu'en fait on travaille en Integer). C'est la seule astuce que j'ai trouvée pour augmenter les performances.
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
4 nov. 2006 à 12:15
Quels sont les algorithmes utilisés STP (s'ils ont un nom) ?
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
3 nov. 2006 à 22:27
C'est effrayant de penser qu'à 2 jours près, tu nous servais tes nombres monstrueux pour Halloween ! J'en ai les poils qui se dressent sur la tête, les genoux qui flageolent et les dents qui claquent... :(
Sérieusement, très intéressant tout ça.
Heu, bistromathique, ça va pas mettre trop de serveurs au chomedu j'espère... bon, ça va, je sors... ;-)
Utilisateur anonyme
3 nov. 2006 à 21:31
Petite minute culturelle:
Ce concept porte le nom de bistromathique
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 nov. 2006 à 14:42
Merci pour ces excellentes suggestions, Foxi. Tu m'ouvres des horizons nouveaux et infinis... :)

Je n'ai plus qu'à tout reprendre à zéro et ça me sape un peu le moral. J'aurais mieux fait de t'en parler avant de me lancer tête baissée... lol

PS: Je trouve aussi qu'il y a bcp de code. Je pouvais très bien le simplifier, mais au détriment des performances. J'ai voulu éviter au max l'abondance de conditions imbriquées dans ces boucles assez longues.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
3 nov. 2006 à 14:15
ah j'oubliais, un tableau d'entier peut servir egalement a generer des flottants a virgule fixe,
il suffit pour cela d'utiliser des mots (a gauche) pour les entiers et les autres (a droite) pour les decimales.
dans un array[0..1] of cardinal, n[0] = partie entiere et n[1] = partie decimale, ce qui nous donne des flottants a virgule fixe de 0,0 a 4294967295,4294967295

dans une struture record on aurait :
TFixFloat = record
ffSign : smallint;
ffInt : cardinal;
ffDec : cardinal;
end;

cela nous permet de faire des nombres flottants de -high(cardinal)..high(cardinal)
je te laisse imaginer la suite si on remplace ffInt et ffDec par des int64 ou des tableaux d'entiers.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
3 nov. 2006 à 14:06
alors, pour avoir fait un programme identique un jours, je peu te dire ceci :

le type string, malgrés sa grande simplicitée d'utilisation, ne permet pas réellement d'obtenir de bonne performance.

le mieux serait de travailler sur : un tableau d'entier, a grand coups de shl, shr, rol, ror, and, xor ect...
avantage du tableau d'entier (byte array par exemple) est la possibilitée de travailler directement avec le disque dur grace a un tfilestream, plutot que dans la memoire.
cela augmente directement la capacitée des nombres.

l'avantage de calculer en hexadecimal, c'est le gain non seulement en capacitée memoire, mais egalement des performance.
sur un string, on a besoin de 1 octet * nombre du chiffre
alors qu'avec un tableau d'entier on a 4 bits * nombre du chiffre
sois un gain de 4 bits pour chaque symbole et des dizaines d'octets economisé au final.

malheureusement, le tableau d'entier est plus difficile a utiliser et a manipuler.

pour cela tu peu t'inspirer des methodes qui permettent d'avoir des entiers de 64, 128, 256, 512 bits.
Int64 = array[0..1] of cardinal;
Int128 = array[0..3] of cardinal;
Int256 = array[0..7] of cardinal;
Int512 = array[0..15] of cardinal;
l'avantage majeur c'est qu'on peu facilement utiliser les manipulations de base (+ - * / div mod shl shr) sur les données de ce type de tableau. contrairement au string qui necessite de nombreuses manipulations et convertions qui ralentissent les performances.

voila.

en tout cas, ça m'a l'air d'etre du bon boulot, sauf que je trouve qu'il y a beaucoup de code.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 nov. 2006 à 14:03
Je note: "Cirec me fait confiance et va bientôt me confier la gestion de son portefeuille boursier"...

On peut toujours virer le ProgressBar. Il n'est là que pour ne pas désespérer certains lors des tests de calculs qui peuvent parfois être assez longs dans cette démo.

Merci pour tout, Cirec ;)
Utilisateur anonyme
3 nov. 2006 à 13:32
Salut,

je vais enfin pouvoir faire mes comptes ... lol

un petit bémol tout de même,
l'état actuel de Calculs.pas ne permet pas une réutilisation directe du code ...
en cause : ...then Form1.ProgressBar1.StepIt

Comme N_M_B je te fais confiance ...
Bravo
@+
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 nov. 2006 à 13:17
Merci pour la note et surtout ta confiance aveugle, N_M_B :))

En effet, le titre est un peu racoleur.
Mais c'est juste dans le but de racoler :p
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
3 nov. 2006 à 12:39
j'ai mis 10/10 éspéron que les calculs sont juste :p
bonne continuation ++
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
3 nov. 2006 à 12:31
wahouuu "CALCULS SUR DES NOMBRES MONSTRUEUX" le titre est bien choisis , grand bravo je n'ai rien a dire, l'unite Calculs devrais faire partie des unites delphi par défaut :p lol
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 nov. 2006 à 12:06
lol

... ou certains déficits étatiques... ;)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
3 nov. 2006 à 11:59
ha, enfin un programme pour calculer les impots d'une vie complete :O
Rejoignez-nous