Accueil > Forum > > > > Fonction pow buguée ??
Fonction pow buguée ??
samedi 13 août 2005 à 01:09:08 |
Fonction pow buguée ??

Gendal67
|
Bonsoir, Je dévellope actuellement des fonctions mathématiques et je crois que j'ai une fonction qui calcule mal...! Je m'explique : (ULONG)((pow(65, 5))) % 21
Ce calcul me retourne 10...alors que j'ai beau refaire mes calculs à moi, je trouve toujours 11 ! Pourtant lorsque je mets des valeurs genre 1 à 35 par exemple à la place de 65, tout semble correct...
Voici mon calcul perso :
65 = 2 mod 21 65^5 = 32 mod 21 <==> 65^5 = 11 mod 21
J'ai cherché pendant un long moment et je n'ai pas trouvé d'ou pouvait venir l'erreur... le ULONG convertit le pow() pour pouvoir subir l'opérateur modulo; il accepte largement la valeur 65^5 ... donc là je n'ai pas d'explication  Merci de votre aide  Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
samedi 13 août 2005 à 08:38:19 |
Re : Fonction pow buguée ??

luhtor
|
Oui étonnant, moi j'ai fais ceci:
cout << (int)powf(65,5) << endl;
cout << (int)pow((double)65,5) << endl;
cout << __cmath_power(65,5) << endl;
Résultat:
1160290688
1160290625
1160290625
les deux dernières solutions sont corrects apparemment. Tu peux aller voir le fichier cmath:
template<typename _Tp> _Tp __cmath_power(_Tp, unsigned int);
Je comprend pas bien.
|
|
samedi 13 août 2005 à 09:32:15 |
Re : Fonction pow buguée ??

vecchio56
|
De toutes facons pour les entiers c'est idiot à mon avis d'utiliser un fonction faite pour les flottants. On sait que ces nombres sont codés de manière imprécise. Je pense que tu as plutot intérêt à écrire ta routine int ipow(int, int)
|
|
samedi 13 août 2005 à 09:38:10 |
Re : Fonction pow buguée ??

vecchio56
|
D'ailleurs voila un programme qui explique tout:
#include
using namespace std;
int main()
{
float f = 1160290625.0f;
cout << (int)f; // affiche 1160290688
}
Tu ne peux pas coder 1160290625 dans un float, il faut un double. Voila pourquoi pow donne le bon résultat et pas powf
Et je viens de tester, (unsigned long)((pow(65, 5))) % 21; m'affiche 11, tu es sur de toi Gendal?
|
|
samedi 13 août 2005 à 10:10:38 |
Re : Fonction pow buguée ??

Gendal67
|
vecchio56> Je crois l'etre...enfait j'ai essayé :
cout << (ULONG)((pow(65, 5))) % 21; printf("%ld\n", (unsigned long)((pow(65, 5))) % 21);
toujours obtenu 10... j'ai essayé avec cout en me disant que le %ld était peut-etre source de l'erreur...mais en fait cout m'affiche également 10... je devrais tester comme tu le suggère avec une fonction perso...même si je en comprend toujours pas d'ou peut bien venir le problême...(dev-cpp?)
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
samedi 13 août 2005 à 10:21:13 |
Re : Fonction pow buguée ??

whikie
|
salut non en tout cas pas avec la version 4.9.9.2 de Devcpp avec #include <cstdlib> #include <iostream> #include <math.h>
using namespace std;
int main(int argc, char *argv[]) { cout << (int)powf(65,5) << endl; cout << (int)pow((double)65,5) << endl; cout<< (unsigned long)((pow(65, 5))) % 21<<endl;
system("PAUSE"); return EXIT_SUCCESS; }
j'obtiens 1160290688 1160290625 11
bonne chance
|
|
samedi 13 août 2005 à 10:22:27 |
Re : Fonction pow buguée ??

Gendal67
|
Et là avec la fonction perso : ULONG pow(ULONG ldBase, int exposant); tout marche...elle me retourne bien 11...je crois que l'erreur doit etre assez difficile à trouver... Merci à tous de m'avoir aider  Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
samedi 13 août 2005 à 10:50:30 |
Re : Fonction pow buguée ??

Gendal67
|
J'ai parlé trop vite...en fait c'est bizarre...avec ma fonction perso, j'ai bien 11 comme retour mais lorsque je remplace le 65 par 100 je trouve la valeur 17 alors que je m'attend à obtenir 4  Voici mon code : register int oct; while( (oct = fgetc(hFileIn)) != EOF) { printf("OCT : %d\tCode : %ld\n", oct, (this->pow((ULONG) oct, 5)) % 21); } Pitié que qqun m'éclaire! Tout semble fonctionner avec des valeurs de oct de 0 à environ 80 (je dis bien semble) mais après j'obtiens des résultats érronés...je ne comprend pas  Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
samedi 13 août 2005 à 11:01:17 |
Re : Fonction pow buguée ??

vecchio56
|
C'est bien simple: les int sont codés sur 32 bits, et 100^5 > 2^32-1
Regarde gmp ca pourrait t'aider
|
|
samedi 13 août 2005 à 11:04:49 |
Re : Fonction pow buguée ??

Gendal67
|
Désolé vecchio mais je ne capte pas le rapport là... pow retourne un ULONG (donc une plage très étendue) et oct est toujours compris entre 0 et 255 puisque c'est un caractère lu dans le fichier...de + printf utilise bel et bien %ld réservé aux long... pas callé ce que tu as voulu dire...
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
Cette discussion est classée dans : fonction, mod, pow, ulong, buguée
Répondre à ce message
Sujets en rapport avec ce message
probleme avec la fonction pow() [ par jeani763 ]
j'ai un probleme avec la fonction powvoila mon code long int lettre1=pow(110,5);vous puriez me dire ce qui ne va pas pleas
problème avec la fonction pow... [ par othland ]
sltau fait, j'arrive pas à interpreter le résultat de la fonction pow:int pk;float num;double pui;pui=pow(num,pk); quand je met pk=23 et num= 15 par e
fonction 'pow' [ par caro_perf ]
Bonjour tt le monde, Voila moi j'ai fait un programme de calcul mathématiques en c++. Mes fonctions contiennent la fontion "normalement" prédéfinie po
Besoin de precision sur l'utilisation de la fonction pour redimensionner une image Bitmap [ par noetom ]
Bonjour, j'ai besoin de redimmensionner une image Bmp et j'ai trouvé les sources pour le faire sur le site ici : http://www.cppfrance.com/code.aspx?i
Comparaison caracteres dans un fichier et gestion modem, TCP ...... sous C (Linux) [ par macaco94 ]
Salut, voila mon probleme:J'ai du finalyser un sniffer utilisant Libnet, libpcap et ensuite adapter un prog qui gere mes modems car c'est une simulati
Fonction de reduction de la taille d'un fichier en C ou en C++ [ par djoni ]
Bjrs,Je voudrais savoir s'il existe en C ou en C++ une fonction qui permet de réduire la taille d'un fichier . Au cas où cette fonction n'existe pas,
Aide sur une fonction [ par lildan ]
Bonjour tout le monde,j'aimerais savoir comment on fais en C pour permettre à un programme d'exécuter le code plus lentement. Par exemple, permettre,
freeglut [ par un4given ]
Bonjour bonjour les gens !Bon en fait je travaille sous Borland 5.02 et je voudrais utiliser freeglut afin de me servir de la fonction glutLeaveMainLo
Surcharge de l'opérateur << [ par kenjimax ]
Bonjour à tous, Je rencontre un petit probleme avec la surcharge de l'opérateur <<. Dans une classe mere, je veux afficher les caractéristiques d'un
fonction DocumentProperties .... [ par Pindus ]
j ai besoin de pouvoir imprimer par defaut en mode paysagela fct DocumentProperties doit permettre de le faire mais g des soucis...S q qqn pe m expliq
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|