IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Modulo et division avec un grand nombre (double)


Sujet :

C

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Modulo et division avec un grand nombre (double)
    (re) bonjour à tous,

    Désolé d'envahir le forum aujourd'hui.

    J'aimerais faire un modulo: int res1 = (int)(code%256);
    et une division: long reste1 = (long)(((double)code)/256);

    Mais C ne veut pas faire un modulo avec autre chose qu'un int et ma variable est un double (pas le choix, la valeur est 620168815429).

    De plus, la division ne marche pas non plus (transtypage incorrect ?).

    Pas possible non plus d'écrire moi même ma fonction de modulo car le temps de traitement est trop long (je suis sur un périférique).

    Quelqu'un peut-il m'aider ?
    David.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Modulo et division avec un grand nombre (double)
    Citation Envoyé par dacid
    J'aimerais faire un modulo: int res1 = (int)(code%256);
    et une division: long reste1 = (long)(((double)code)/256);

    Mais C ne veut pas faire un modulo avec autre chose qu'un int et ma variable est un double (pas le choix, la valeur est 620168815429).
    fmod() (<math.h>)

    Mais si tu as C99 et ses long long, ça passe en entier avec %.

    Sinon, pour accélerer les traitements, on peut faire la division et le modulo d'un coup avec div(), ldiv() ou [C99] lldiv().
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Emmanuel,

    J'ai essayé fmod() mais ce n'est pas le modulo que cette fonction retourne, je ne sais pas quoi d'ailleurs.

    De plus, je suis sur un C propriétaire et les long long ça n'existe pas chez moi.

    Par contre, je ne connais pas du tout C99, peux tu détailler STP.
    David.

  4. #4
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par dacid
    Bonjour Emmanuel,

    J'ai essayé fmod() mais ce n'est pas le modulo que cette fonction retourne, je ne sais pas quoi d'ailleurs.

    De plus, je suis sur un C propriétaire et les long long ça n'existe pas chez moi.

    Par contre, je ne connais pas du tout C99, peux tu détailler STP.
    Tu confonds avec modf(), fmod() fournit bien le modulo pour les doubles :
    NOM
    fmod - Fonction modulo reel.

    SYNOPSIS
    #include <math.h>

    double fmod (double x, double y);

    DESCRIPTION
    La fonction fmod() calcule le reste de la dvision de x par y. La valeur
    renvoyée est x - n * y, ou n est le quotient x / y, arrondi à l’entier
    inférieur en valeur absolue.
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Excellent, ça marche !!!

    Et pour la division, y a t-il une fonction similaire ?

    Voici toutes les fonctions qui me sont disponibles dans math.h:
    • sin(x) sine of x
    • cos(x) cosine of x
    • tan(x) tangent of x
    • asin(x) sin-1(x) in range [-π/2, π/2], x ∈ [-1, 1]
    • acos(x) cos-1(x) in range [0, π], x ∈ [-1, 1]
    • atan(x) tan-1(x) in range [-π/2, π/2]
    • atan2(y, x) tan-1(y/x) in range [-π, π]
    • sinh(x) hyprebolic sine of x
    • cosh(x) hyperbolic cosine of x
    • tanh(x) hyperbolic tangent of x
    • exp(x) exponential function ex
    • log(x) natural logarithm ln(x), x>0
    • log10(x) base 10 logarithm log10(x), x>0
    • pow(x, y) xy. A domain error occurs if x=0 and y<=0, or if x<0 and y is not an integer
    • sqrt(x) x, x0
    • ceil(x) smallest integer not less than x, as a double
    • floor(x) largest integer not greater than x, as a double
    • fabs(x) absolute value x
    • ldexp(x, n) x * 2n
    • frexp(x, int *exp) splits x into a normalized fraction in the interval [1/2, 1], which is returned, and a power of 2, which is stored in *exp. If x is zero, both parts of the result are zero.
    • modf(x, double *ip) splits x into integral and fractional parts, each with the same sign as x. It stores the integral part in *ip, and returns the fractional part.
    • fmod(x, y) floating point remainder of x/y, with the same sign as x. If y is 0, the result is implementation-defined.

    Mais je ne vois rien qui pourrait convenir.

    N'y a t-il pas moyen de changer le calcul pour obtenir le quotien maintenant qu'on a le modulo ?
    David.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dacid
    Et pour la division, y a t-il une fonction similaire ?
    Gné ? Pour le quotient, tu utilises l'opérateur /, c'est tout. Au moins un des opérandes doit être de type flottant (float ou double). Le résultat sera de type double.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut Re: Modulo et division avec un grand nombre (double)
    Citation Envoyé par dacid
    et une division: long reste1 = (long)(((double)code)/256);

    De plus, la division ne marche pas non plus (transtypage incorrect ?).

    Quelqu'un peut-il m'aider ?
    A mon avis ce qui "marche" pas ce n'est pas la division, c'est ton cast en long.
    En effet, les longs peuvent coder des nombres beaucoup moins grands que les doubles..
    Ici tu divise un double par 256, ce qui te donne un double legerement plus petit, donc surement trop grand pour ton cast en long juste apres
    Tout depend de la valeur de code mais si mes souvenirs sont bons, tu travailles avec des nombres tres grands.
    Laisse le résultat en double (enlève le (long) ) et ça passera.
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    ui, c'est parfait maintenant.

    Quelle embrouille tous ces transtypage...

    Enfin, du moment qu'on arrive à faire ce que l'on veut.

    Merci à tous.
    David.

  9. #9
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par dacid
    ui, c'est parfait maintenant.

    Quelle embrouille tous ces transtypage...

    Enfin, du moment qu'on arrive à faire ce que l'on veut.

    Merci à tous.
    Non il n'y a pas d'embrouille si on regarde bien ce qu'on veut convertir et en quoi
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pagination avec de grands nombres de pages
    Par biggyboy dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2009, 09h48
  2. [AJAX] Actualiser un div avec un grand nombre de paramètres
    Par yoshï dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/11/2008, 11h43
  3. Réponses: 6
    Dernier message: 04/06/2008, 14h38
  4. Affichage d'un grand nombre (double)
    Par gofono_bass dans le forum C++
    Réponses: 4
    Dernier message: 01/06/2008, 13h51
  5. [Débutant]Faire un if avec un grand nombre de condition ?
    Par nicofromChina dans le forum Langage
    Réponses: 15
    Dernier message: 21/01/2007, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo