Résultats de 1 à 3 sur 3

Sujet : Des entiers trés trés grand

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    2

    Des entiers trés trés grand

    Bonjour à tous!

    Débutant en c++, je veux réaliser mon propre programme qui renvoie le résultat de la division de a par b, et ce même pour des nombres énormes.

    Pour que c++ ne soient pas submergés par la taille des calculs, j\'ai rajouté les instructions suivantes:



    while ( avar> pow(10,13)*b )
    { avar=avar-pow(10,13)*b;



    while ( avar> pow(10,10)*b )
    avar=avar-pow(10,10)*b;


    while ( avar> pow(10,7)*b )
    avar=avar-pow(10,7)*b;

    while ( avar> pow(10,4)*b)
    avar=avar-pow(10,4)*b;

    Mon programme global s\'écrit:


    double long reste(double long a,double long b)

    { double long avar; // variable locale
    avar=a;

    int k=1;
    if (avar<b) k=0; else {






    while ( avar> pow(10,13)*b )
    { avar=avar-pow(10,13)*b;



    while ( avar> pow(10,10)*b )
    { avar=avar-pow(10,10)*b;


    while ( avar> pow(10,7)*b )
    { avar=avar-pow(10,7)*b;

    while ( avar> pow(10,4)*b )
    { avar=avar-pow(10,4)*b;



    while ( (b*k)<avar/10) // permet d\'obtenir plus vite les
    // valeurs qui nous intéressent
    { k=k*10 ; } ;




    while ( (b*(k+100))<avar) // permet d\'obtenir plus vite les
    // valeurs qui nous intéressent
    { k=k+100 ; } ;





    while ( b*(k+1) <= avar)

    { k=k+1; } ; // pour obtenir la valeur du quotient

    }

    return ( avar-b*k); } // et voilà notre reste!


    Puis je le teste pour certaine valeur.
    Pour des nombres entiers que je tape d\'une traite, aucun pb.


    Seulement voilà, j\'ai défini une suite de nombres aléatoires :


    table gen(int n)

    { double long b=2;
    int j;
    for ( j=1;j<33;j=j+1)

    b=b*2;


    table A; double long k; k=reste(time(0),b);
    int i;
    for (i=1; i<=n;i=i+1 )
    { A.tableau[i]=k ; k= reste (69069*k,b) ; };

    return A; }

    et bien que ce soit tous des double long, la machine me les renvoie sous la forme ( 9.7e+08 ) .

    Et si je veux le reste de la division par 9 de ces nombres j\'obtiens des résultats FAUX !

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    3
    salut

    dans mon ecole en premiere annee on devai faire une calculatrice qui devai gerer des nombres infini sur n importe kel base et pour cela la meilleur facon etai d utiliser de lire ton nombre comme un char par exemple

    586 + 896 tu fait comme si tu realisais loperation a la main 6+6 = 2 (je sais c 12 mais jexpliek la ) et tu recupere la retenu qui es 1 et aprestu passe au caractere suivant e tu concatene ton resultat a chaque fois dans une autre chaine exemple

    6+6=2 ensuite 9+8+1=8 ensuite 5+8+1=14

    donc tu obtien 1482 et bien sur sachant qu une chaine de caractere es surement lpus grande qu un int tu pourra travailler sur des tres grand nombre, maintenant c la solution que nous on nous avait donner. donc je sais pas si ca peuyt taider mais bonne chance

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    6 517
    Je ne te suis pas tres bien, tu ouvres des accolades { mais tu ne les fermes pas }.
    Serait ce un oubli de recopie ?
    Il y a aussi le }; a la fin du code qui n\'est pas tres beau.
    De plus, je ne comprends pas quel reste tu calcules puisque tu travailles avec des nombres réels. On ne cherche le reste en général que pour des divisions euclidiennes de nombres entiers.
    69069*k peut depasser a priori la taille d\'un double long.
    J\'ai fait un printf(\"%d\",sizeof(double long));
    Et j\'ai obtenu 12 qui n\'est pas un exposant de 2.

    Si tu veux essayer le reste d\'une division euclidienne de nombres entiers tres grands, essaye le type __int64 codé sur 64bits avec %I64d pour l\'afficher.
    En esperant que je n\'ai pas repondu a coté de ce que tu cherches
    Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
    N'oubliez pas le Tag [Résolu]http://www.ressources.moteurprog.com...rum/Resolu.gif.

    Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé