PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Taille d'un champ numérique
Taille d'un champ numérique
Débuté par Faq, 19 fév. 2021 07:26 - 14 réponses
Posté le 19 février 2021 - 07:26
Bonjour

Je veux entrer un nombre de plus de 50 chiffres pour la partie entière et 20 chiffres pour la décimale dans un champ 1 numérique puis dans un deuxième champ 2 numérique afin d'avoir un résultat final.

résultat final= Champ 1 * champ 2

mais cela n'accepte pas tous les nombres même si je spécifie 38 dans la partie complète et la partie décimale.

Merci d'avance de me donner une idée.
Membre enregistré
1 939 messages
Popularité : +53 (65 votes)
Posté le 19 février 2021 - 10:58
Bonjour,

Voir le type Monétaire.

--
Bon dev,
Jean-Pierre
Posté le 19 février 2021 - 11:26
Merci de ton retour


Le type monétaire est de 23
Posté le 19 février 2021 - 13:10
Je veux entrer un nombre de plus de 50 chiffres pour la partie entière et 20 chiffres pour la décimale dans un champ 1 numérique puis dans un deuxième champ 2 numérique afin d'avoir un résultat final.

résultat final= Champ 1 * champ 2

mais cela n'accepte pas tous les nombres même si je spécifie 38 dans la partie complète et la partie décimale.



Donc, tu veux mettre 50 chiffres dans une zone qui est décrite comme maximum 38 et tu t'étonne que ca ne fonctionne pas?
Posté le 19 février 2021 - 15:24
c'est déjà testé et ça n'a pas marché numérique est de(3866)
Membre enregistré
3 892 messages
Popularité : +227 (347 votes)
Posté le 19 février 2021 - 18:22
Bonjour,
Il suffit de passer les champ en texte et d'appliquer soit :
1-L'Algorithme de Karatsuba https://fr.qaz.wiki/wiki/Karatsuba_algorithm
2-L'Algotithme de Toom-Cook https://fr.qaz.wiki/wiki/Toom%E2%80%93Cook_multiplication
3-L'Algorithme de Schönhage https://fr.qaz.wiki/wiki/Sch%C3%B6nhage%E2%80%93Strassen_algorithm

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 348 messages
Popularité : +93 (137 votes)
Posté le 20 février 2021 - 00:30
Voroltinquo, reste plus qu'à faire ces algo en wlangage.
Et d'utiliser les entier sur 8 octets
Membre enregistré
3 892 messages
Popularité : +227 (347 votes)
Posté le 20 février 2021 - 05:02
Les algos sont déjà là. Il lui suffit juste de les traduire

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 892 messages
Popularité : +227 (347 votes)
Posté le 20 février 2021 - 07:10
Ensuite, quand tu travaille sur des donnée de l'ordre de 10^50, les millièmes, tu t'en moque alors les 10^-20...

--
Il y a peut être plus simple, mais, ça tourne
Posté le 20 février 2021 - 08:07
Merci beaucoup de vos retours


Alors j'essaye d'appliquer (AB * CD) Algorithme Karatsuba

//Voila mon exemple pour 2 nombres (A et B) de 60 chiffres
A est un numérique=123456789012345678901234567890123456789012345678901234567890
B est un numérique=998765432109876543210987654321098765432109876543210987654321
C est un numérique
D est un numérique

R est un numérique=A *C * 10 * Exp(4)+ ( A * C + B * D - ( A - B)*(C - D))*10 * Exp(2)+C * D

Trace(R)

Mon problème je n'arrive PAS À appliquer la Karatsuba À mon CAS
Vous pouvez m'aider svp

Merci
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 20 février 2021 - 08:57
hello,
A noter qu'avec la bibliothèque logicielle GMP, il n'y a plus guère de limitations.
GNU MP, également appelée GMP, est une bibliothèque logicielle de calcul multiprécision sur des nombres entiers, rationnels et en virgule flottante.

Voici par exemple les résultats de son utilisation dans windev pour
1 - une multiplication d'un flottant avec 50 chiffres significatifs et 20 chiffres en décimal
2 - une élévation de 49 à la puissance 20,30,35,100,200
3 - une boucle de 40 itérations de nombre = nombre*49





49 à la puissance 200 produit un résultat de 339 chiffres :
49^200 =  109450060433611308542425445648666217529975487335970618633541940751543906316349209002147856846968715280739995373528253861552495710170702637728891720852868384710440066743972862761169960663579079291058878933088274875698178024977088223396398265555596916473536792437134632739719389969690630523317113111727683195819839003492006097994729312240001


--
Ami calmant, J.P
Posté le 20 février 2021 - 09:38
Merci Jurassic Pork pour ton retour

Est ce que j'importe La bibliothèque GMP dans windev , vraiment j'ai pas bien compris votre message

C'est possible tu peux me faire un exemple dans windev

Merci
Membre enregistré
213 messages
Popularité : +12 (12 votes)
Posté le 20 février 2021 - 16:22
>49 à la puissance 200 produit un résultat de 339 chiffres

Un bon début pour une clé de chiffrage.
:p

--
-----
Parfois, la logique est implacable...
Posté le 22 février 2021 - 13:08
Bonjour jurassic

Lors de mon test il me demande l'installation de L'objet
L'objet automation 'BedvitCom.BignumArithmeticInteger' n'est pas installé sur votre système.

J'essaye avec un ActiveX mais il n' a y a pas cet objet
comment dois- je faire ?

Merci
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 22 février 2021 - 15:26
hello,
Faq a écrit :
Bonjour jurassic
Lors de mon test il me demande l'installation de L'objet
L'objet automation 'BedvitCom.BignumArithmeticInteger' n'est pas installé sur votre système.


Attention là tu nous parles de la bibliothèque russe Bedvitcom accessible en objet automation, disponible ici : https://www.bedvit.ru/com/ C'est en russe il faut traduire :p
1 - Télécharger sur la page le fichier BedvitCom.zip ( le bouton est en haut à droite)
2 - Extraire les deux fichiers
En supposant que l'on est sur un windows 64 bits :
Si on a un projet Windev 32 bits il faudra utiliser la dll 32 bits du fichier zip
Pour enregistrer la dll dans une invite de commande tapez :
c:\windows\SysWOW64\regsvr32.exe "BedvitCOM(x86).dll"

Si on veut désenregistrer la dll tapez :
c:\windows\SysWOW64\regsvr32.exe /u "BedvitCOM(x86).dll"


Si on a un projet Windev 64 bits il faudra utiliser la dll 64 bits du fichier zip
Pour enregistrer la dll dans une invite de commande tapez :
c:\windows\System32\regsvr32.exe "BedvitCOM(x64).dll"

Si on veut désenregistrer la dll tapez :
c:\windows\System32\regsvr32.exe /u "BedvitCOM(x64).dll"

Normalement maintenant les objets automations sont alors disponibles après enregistrement.
Exemple d'utilisation :
Avec ce code :
BigEntier est un objet automation "BedvitCom.BignumArithmeticInteger"
a1,b1,c1 sont des octets
a1 = 1 ; b1 = 2 ; c1 = 3
BigEntier>>BignumSet(a1, "12345678901234567890123456789012345678901234567890")
BigEntier>>BignumSet(b1, "998765432109876543210987654321098765432109876543210987654321")
BigEntier>>Multiply(c1,a1,b1)
Trace( "12345678901234567890123456789012345678901234567890" + " X 998765432109876543210987654321098765432109876543210987654321 =")
Trace(BigEntier>>bigNum(c1))
BigEntier>>BignumSet(a1,"49")
pow est un entier = 60
BigEntier>>Power(c1,a1,pow)
Trace("49^60 = " + BigEntier>>bigNum(c1))

BigFlottant est un objet automation "BedvitCom.BignumArithmeticFloat"
BigFlottant>>SizeBitsSet(a1,512)
BigFlottant>>SizeBitsSet(b1,512)
BigFlottant>>BignumSet(a1, "1234567890123456789012345678901234567890.12345678901234567891")
BigFlottant>>BignumSet(b1, "12345678901234567890.123456789")
BigFlottant>>SizeBitsSet(c1,512)
BigFlottant>>Multiply(c1,a1,b1)
Trace("1234567890123456789012345678901234567890.12345678901234567891" + " X 12345678901234567890.123456789 =")
Trace(BigFlottant>>bigNum(c1,10,100,".",1))


j'obtiens ceci :





--
Ami calmant, J.P