JesusQuintana
Messages postés5Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention19 juin 2005
-
17 févr. 2005 à 15:55
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 2008
-
18 févr. 2005 à 22:21
Bonjours,
Je veux programmer en C un ensemble complet de fonctions pour additionner, multiplier des nombres en précision étendue. Les nombres devront avoir une taille possible de 100 chiffres en base 10000.Les nombres seront lus indifféremment au clavier ou sur fichier texte. Pae exemple, la syntaxe sur le fichier pourrait donner ça :
Un nombre
Un autre nombre
Un code opératoire (+ ou *)
Un nombre
Un autre nombre
Un code opératoire (+ ou *)
Un nombre
Un autre nombre
Un code opératoire (+ ou *)
Un nombre
Un autre nombre
Un code opératoire (+ ou *)
On arrête sur le caractère (q).
Le nom du fichier sera passé en utilisant argc et argv.
1ere question : est ce que je dois prendre une base 10000 ou 10 pour mes nombres ?
J’hésite…
2ème question : voici mon début de programme…Quelqu’un pourrait corriger ce j’ai fait ? Merci d’avance..
#include
long int* add(long int,long int);
void main()
{
long int a,b,op,*p;
printf("quel op‚ration voulez vous effectuer,taper 1 pour la multiplication\n ou 2 pour l'addition\n");
scanf("%ld",&op);
printf("donner le premier chiffre\n");
scanf("%ld",&a);
printf("donner le deuxieme chiffre\n");
scanf("%ld",&b);
if(op==1)
{
p=add(a,b);
}
else
{
printf("le chiffre tape est mauvais");
exit(1);
}
printf("le nombre est [%ld][%ld] en base 10000\n",*p,*(p+1));
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 18 févr. 2005 à 22:21
Bonjour,
excuse moi de ne pas comprendre ce que tu veux dire mais précision étendu c'est quoi pour toi ? Un nombre entier ou flottant ?
Une base de 10 est bien mieux approprié parce que une base de 10000 je vois pas l'intérêt surtout pour l'afficher(c'est quoi tes 10000 caractères différents pour l'afficher ^^ )!!!!
Si c'est bien des entiers avec lesquels tu travailles, il "suffit" de faire les opérations sur des nombres de 128-bit ou même 256-bit çà devrait suffir .
Pour bien optimiser il faudrait de l'assembleur mais si tu ne connais
pas voilà comment additionner deux nombres 64-bit formé de deux nombres
32-bit .
void add(int n1[2],int n2[2],int res[2])
{
res[0]=n1[0]+n2[0];
if(res[0]<n1[0])
{
res[1]=n1[1]+n2[1]+1;
}
else
{
res[1]=n1[1]+n2[1];
}
}
ou en assembleur(je sais pas si çà passe à la compilation)
void add(int n1[2],int n2[2],int res[2])
{
asm
{
mov eax,[n1];
add [n2];
mov [res],eax;
mov eax,[n1+1];
adc [n2+1];
mov [res+1],eax;
}
}
Pour la multiplication il faut trouver un algo rapide mais je n'en ai pas en tête.