begin process at 2012 05 28 10:14:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

calcul en précision étendue


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

calcul en précision étendue

jeudi 17 février 2005 à 15:55:14 | calcul en précision étendue

JesusQuintana



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

 

 

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

}

 

 

 

long int* add(long int a,long int b)

{

 long int *p,base;

 base=10000;

 

 *p=(a+b);

 if(*p>=base)

 {

      printf("passage ds le if");

      a=((a+b)-base);

      b=1;

      p=(long int*) malloc(2*sizeof(long int));

      *p=b;

      *(p+1)=a;

 }

 else

 {

      printf("passage ds le else");

      p=(long int*) malloc(1*sizeof(long int));

      *(p)=0;

      *(p+1)=(a+b);

 }

 

 return(p);

 

vendredi 18 février 2005 à 22:21:55 | Re : calcul en précision étendue

Pamaury

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.

A m a u r y


Cette discussion est classée dans : base, nombre, long, int, printf


Répondre à ce message

Sujets en rapport avec ce message

probleme allocation memoire dynamique [ par neutrix ] salutvoilaj'ai besoin d'aideje dois convertir un nombre en tableau de chiffres mais c'est quoi ce sirque!!!! [ par namgalsipsclar ] salut! bon, je débute en C , mais là j'ai qqs problèmes a la con : 1_ au moment ou je compile ceci:     #include main() {       int a; pr oh non!! [ par bako25 ] Le prog suivant  calcule le nombre des 'e' dans un paragraphe: #include #include< Windows plante {je sais pas nouveau } pour l'execution du mon code [ par darkwhite ] Salut a tous Je debute en C, et j'ai commencer a faire un petit programme. A la moitié de la creation je l'essaie mé windows me sort un message derreu CONVERSION BINAIRE/HEXA [ par alex64100 ] BJR,je dois développer un prog d e conversion   binaire/héxaa partir de ce code  :#include #include #include /*  exo 2.Becrire un n génerateur des nombres aléatoire (GLC) [ par adola2003 ] bonjour, j`ai un devoir a remettre la semaine prochaine concernant le génerateur des nombres aléatoires LCG avec F<9 (facteur) I<5 (increment) M (modu Fonction recherche (listes chainées) [ par adri10 ] Bonjour à tous, Bon voilà j'ai un gros problème avec ma fonction recherche en liste chainées. Je pensais que mon programme était correct puisqu'en le Conversion décimale binaire [ par Coincoinisback ] Bonjour, je dois écrire un programme qui affiche la conversion binaire d'un nombre entier (compris entre 0 et 4 294 067 295, codé sur 32 bits) mais l' Etat des bit d'un nombre en c++ [ par Debord10 ] Slt! je veux afficher l'état de bit d'un nombre qulconque saisi au clavier,le rang du bit saisi aussi au clavier. SVP veuillez m'aider. voila le code Utilisation de MEX [ par nomadstorm ] Bonjour, J'ai un programme en C qui fonctionne et je voudrais le faire fonctionner sous MatLab afin de pouvoir traiter immédiatement et rapidement


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,359 sec (4)

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