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 :

probleme fonction puissance


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut probleme fonction puissance
    bonjour. je suis actuellement en DUT mesures physiques et nous devons realiser un programme sur les nombres complexes. Une de nos parties consiste a calculer les racines niemes d'un nombres complexe z = a + ib. sauf que je n'arrive a faire ce programme. je bug au niveau des exposants :

    je dois faire un module ^(1/n) sauf que pour les fonctions pow on ne peut utiliser que des nombres decimaux et pour la fonction powf on ne peut utiliser que des float.Or ici j'ai un nombre float (le module) et un nombre decimal (le n)

    combien puis je faire ???
    merci d'avance de votre aide!

    PS : c'est mon premier message sur le forum merci d'etre indulgent.

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    En C tu as à ta disposition plusieurs type pour représenter des réels en virgule flottante : float, double et pour les compilateurs qui l'implémentent long double. Chaque type permet de stocker des nombres en virgule flottante sur une plage avec une certaine précision, mais là ce sont des détails que tu peux trouver sur le net. En général, le plus simple est d'utiliser des double.
    La fonction pow de la biliothèque mathématique est déclarée ainsi : double pow(double x, double y) et elle permet de calculer x à la puissance y.
    Pour convertir un entier n int en double il suffit de le caster ainsi : double x= (double) n;. Pour calculer x à la puissance 1/n tu peux donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    double x;
    int n;
    double resultat;
     
    x=2.7182818;
    n=10;
    resultat = pow( x , 1.0/(double) n );
    Remarque que j'ai écrit 1.0 / (double) n et non pas (double) (1/n). Cette dernière forme calcule d'abord en entier 1/n qui est la division entière et qui pour n non nul donnera 0 -> certainement pas ce que veux.
    La première forme est correcte car on commence par convertir n en double, puis on divise la constante double 1.0 par un double -> on utilise la division en virgule flottante.

    En réalité le cast n'est pas obligatoire et un 1.0 / n serait suffisant. Néanmoins je trouve le cast explicite plus clair en précisant l'intention du codeur (mais c'est un point de vue personnel).

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pour être tout à fait précis, il suffit qu'un des arguments ne soit un float ou un double pour que la division soit un flottant (float ou double, selon)

    Toutes les expressions suivantes utiliseront bien la division flottante.
    • 1 / (double) n
    • 1.0/n
    • (double) 1 / n
    • 1.0f / n
    • 1.f / (float) n


    Les premières sont des doubles, tandis que les deux dernières sont des floats.
    par ailleurs, ceci seront des doubles:
    1.0f/(double) n1.0 /(float) n

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par snilow Voir le message
    J'aurais une autre petite question, comment dois je faire pour exporter un fichier créer via jgrasp vers excel de facon a ce que celui ci puisse le relire pour tracer un graphe ?
    Merci d'avance
    Salut
    Le plus simple: tu exportes tes données au format CSV et tu l'importes dans excel
    Le plus compliqué: tu utilises des librairies spéciales dédiées à écrire du XLS. Il en existe en Python dont il devrait en exister en C.

    Citation Envoyé par leternel Voir le message
    Pour être tout à fait précis, il suffit qu'un des arguments ne soit un float ou un double pour que la division soit un flottant (float ou double, selon)
    Attention, les opérandes sont castés au fur et à mesure de l'opération et non d'un coup. Donc (piège), avoir un opérande en flottant dans l'opération ne force pas forcément l'opération entière en flottant. Le flottant peut ne se révéler qu'à la fin et donc trop tard.

    Exemple: float x=1.0 + 3 / 2. Malgré la présence d'un flottant dans l'expression, la division étant prioritaire se fera en premier dans le type de ses opérandes (entiers) et renverra alors 1. Ensuite ce 1 sera ajouté au 1.0 et donnera 2.0.
    La bonne écriture pour avoir ce qu'on espère est float x=1 + 3 / 2.0...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    mais 2.0 + 3 / 2 n'est pas une seule expression, mais deux: 2.0 + expr et 3 / 2.

    Une expression est définie dans la grammaire par:
    • une constante
    • une variable
    • un appel de fonction
    • unary expression (unary étant !, ~, -, +, *, &, sizeof)
    • expression binary expression (binary étant entre autre =, <, +, -, *, /, %, !=, ., ",", :: etc)
    • (expression)
    • expression [ expression ]
    • expression ? expression : expression


    Chaque expression possède un type de valeur, inféré depuis celui des opérandes impliqués.
    Pour des types primitifs, a + b est du premier type capable de contenir a et b. Le mécanisme utilisé est double: la promotion entière (char et int donne int) et la promotion flottant (si un float ou double, résultat float ou double)
    Par exemple deux ints donnent un int, un char et un long donnent un long, tandis qu'un int et un double donneront un double.
    Pour s'en souvenir, on a en gros char < short < int < long < float < double

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leternel Voir le message
    mais 2.0 + 3 / 2 n'est pas une seule expression, mais deux: 2.0 + expr et 3 / 2.

    Une expression est définie dans la grammaire par:
    • une constante
    • une variable
    • un appel de fonction
    • unary expression (unary étant !, ~, -, +, *, &, sizeof)
    • expression binary expression (binary étant entre autre =, <, +, -, *, /, %, !=, ., ",", :: etc)
    • (expression)
    • expression [ expression ]
    • expression ? expression : expression


    Chaque expression possède un type de valeur, inféré depuis celui des opérandes impliqués.
    Pour des types primitifs, a + b est du premier type capable de contenir a et b. Le mécanisme utilisé est double: la promotion entière (char et int donne int) et la promotion flottant (si un float ou double, résultat float ou double)
    Par exemple deux ints donnent un int, un char et un long donnent un long, tandis qu'un int et un double donneront un double.
    Pour s'en souvenir, on a en gros char < short < int < long < float < double

    Oui oui, ça c'est la théorie qu'on apprend dans les livres.
    Dans la réalité, on part bille en tête sans forcément lire tout le livre et donc parfois on se fait avoir...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Merci beaucoup a toi !!! Je vais tester ça sur mon programme je vais voir si sa marche ou pad ! Je te tiendrais au courant.
    Merci

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut autre problèmes : exporter fichier vers excel.
    J'aurais une autre petite question, comment dois je faire pour exporter un fichier créer via jgrasp vers excel de facon a ce que celui ci puisse le relire pour tracer un graphe ?
    Merci d'avance

Discussions similaires

  1. probleme d'algorithme pour une fonction puissance
    Par john_evrest dans le forum Caml
    Réponses: 10
    Dernier message: 25/10/2011, 15h58
  2. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  3. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  4. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52
  5. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21

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