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 ?
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().
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.