begin process at 2012 02 05 00:48:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > CALCULS SUR DES NOMBRES MONSTRUEUX.

CALCULS SUR DES NOMBRES MONSTRUEUX.


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :cardinal, précision, réels, virgule Niveau :Débutant Date de création :03/11/2006 Vu / téléchargé :7 232 / 562

Auteur : Caribensila

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
C'est en m'intéressant à la méthode de calcul Monté-Carlos que j'ai eu besoin de boucles comptant plus de 4 294 967 295 itérations, donc plus que le type cardinal ne le permet.        
Cette jolie méthode Monté-Carlos, qui est très bien adaptée à l'info, a besoins en effet d'énormes calculs pour donner quelque résultat probant.
D'où cette unité qui permet d'effectuer des calculs sur des nombres comportant des milliers de chiffres, avant ou après la virgule. En théorie, vous ne dépasserez pas les nombres de 2 147 483 647 chiffres, mais ça donne le temps de voir venir...  lol



 Conclusion

J'espère qu'il n'y a plus de bug.
La division, en particulier, présente une posibilité d'optimisation par la recherche des apparitions périodiques de nombres. Je verrai ça plus tard car j'ai hâte de retourner à ma chère méthode Monté-Carlos et surtout, j'en ai un peu marre de l'arithmétique pour le moment  :))

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture AUSSI PRATIQUE QUE CANVAS.PIXELS[ ] MAIS JUSQU'À 450 FOIS PL...
Source avec Zip LE CRIME PARFAIT
Source avec Zip Source avec une capture ET ALLEZ HOP ! *.INI, *.DAT, *.BIN, ETC... TOUS DANS LE *...
Source avec Zip Source avec une capture LES FIBERS : DES THREADS NON PRÉEMPTÉS PAR LE SYSTÈME
Source avec Zip SCANNER ALEATOIREMENT TOUS LES PIXELS D'UN BITMAP

 Sources de la même categorie

Source avec Zip Source avec une capture RESOLUTION EQUATIONS DEGRE "N" + CALCULETTE SCIENTIFIQUE par pseudo3
Source avec Zip DEUX BIBLIOTHÈQUES POUR CALCULER AVEC DES ENTIERS TRÈS GRAND... par Rekin85
Source avec Zip Source avec une capture MOTEUR PHYSIQUE 2D CHIPMUNK.. EN DELPHI! par Bacterius
Source avec Zip Source avec une capture TABLEAU DE KARNAUGH par ADMR
Source avec Zip Source avec une capture FILTRAGE NUMÉRIQUE IIR par Pouillerot

Commentaires et avis

Commentaire de JulioDelphi le 03/11/2006 11:59:52 administrateur CS

ha, enfin un programme pour calculer les impots d'une vie complete :O

Commentaire de Caribensila le 03/11/2006 12:06:48

lol

... ou certains déficits étatiques...  ;)

Commentaire de N_M_B le 03/11/2006 12:31:04

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

Commentaire de N_M_B le 03/11/2006 12:39:14

j'ai mis 10/10 éspéron que les calculs sont juste :p
bonne continuation ++

Commentaire de Caribensila le 03/11/2006 13:17:04

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

Commentaire de cirec le 03/11/2006 13:32:54 administrateur CS

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
@+

Commentaire de Caribensila le 03/11/2006 14:03:43

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  ;)

Commentaire de f0xi le 03/11/2006 14:06:45 administrateur CS

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.

Commentaire de f0xi le 03/11/2006 14:15:19 administrateur CS

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.

Commentaire de Caribensila le 03/11/2006 14:42:39

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.

Commentaire de CptPingu le 03/11/2006 21:31:01 administrateur CS

Petite minute culturelle:
Ce concept porte le nom de bistromathique

Commentaire de japee le 03/11/2006 22:27:01 administrateur CS

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... ;-)

Commentaire de rambc le 04/11/2006 12:15:04

Quels sont les algorithmes utilisés STP (s'ils ont un nom) ?

Commentaire de Caribensila le 04/11/2006 13:24:01

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.

Commentaire de Caribensila le 04/11/2006 13:30:01

--> Japee
Remets-toi!
Allez, j't'invite à boire un coup au bistromathique du coin...

Commentaire de rambc le 04/11/2006 15:26:46

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.

Commentaire de f0xi le 04/11/2006 15:29:31 administrateur CS

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...



Commentaire de japee le 04/11/2006 15:53:24 administrateur CS

"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... ^^

Commentaire de Caribensila le 04/11/2006 16:07:10

:))
... 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.

Commentaire de f0xi le 05/11/2006 18:34:09 administrateur CS

mince a confondus ... desolé les gars.

j'ai mis 8, pour la somme de boulot et de reflexion et la qualitée du travail.

Commentaire de Caribensila le 05/11/2006 22:10: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.

Commentaire de rambc le 05/11/2006 22:39:20

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...

Commentaire de Debiars le 09/11/2006 17:49:15

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 ?

Commentaire de japee le 09/11/2006 18:41:26 administrateur CS

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/ ;-)

Commentaire de f0xi le 20/11/2006 00:41:11 administrateur CS

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.

Commentaire de cirec le 20/11/2006 13:54:35 administrateur CS

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Saisie des réels avec point ou virgule. [ par Caribensila ] J'ai une version française de Delphi. Et je voudrais, en mode conception, savoir comment passer à la saisie des réels à l'américaine, avec un point? point et virgule [ par m_cyril1 ] Comment faire pour utiliser le point à la place de la virgule lorsqu'on rentre des chiffress dans un TEdit, sans passer par options régionna séparateur par virgule [ par yvescollet ] bonjour, lors d'une requete sql, je récupère une colonne qui peut contenir plusieurs données séparées par des points-virgule transformer un nombre à virgule(style float) en nombre sans virgule (int) [ par Nargzul ] Bonjour J'ai trouvé la fonction round, mais elle arrondi, et moi il me faudrait qu'elle coupe tout simplement tout ce qui dépasse si j'ai Partie avant la virgule. [ par Becracker ] Salut les gars, Je voudrai savoir comment on fait lorsqu'on a le résultat d'une division de ne récupérer que la partie avant la virgul controle de saisie [ par kam81 ] Bonjour,comment empêcher les utilisateurs de saisir 2 fois ou plus la virgule dans un tedit pour faire rentrer une valeur monetaire.a savoir changer une virgule en point [ par pseudoOM ] pseudoOM Précision temporelle d'une éxécution [ par f6dqm1 ] Bonjour à tousDans une application Delphi, je cherche à exécuter une action répétitive sur un port série avec une pr&#23 virgule flottante [ par pseudoOM ] Bonjour ami développeurs en delphi. Voici mon problème : dans ma base de données ACCESS j'ai un champs de type numérique (rée Problème de précision [ par nassim25 ] Bon jour, j’ai fais une petite application qui calcule une prime avec Delphi et paradoxe, le problème qui me dérange et lors de calcule


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales