begin process at 2012 05 29 04:58:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Fonction pow buguée ??


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

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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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!! :-))

1 2

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,328 sec (3)

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