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

Bibliothèque standard C Discussion :

Comportement différent de cos() selon contexte de l'appel


Sujet :

Bibliothèque standard C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Comportement différent de cos() selon contexte de l'appel
    Bonjour à tous,

    Tous d'abord, je m'excuse si je ne suis pas dans le bon sous-forum, j'ai longuement hésité...
    Alors voilà mon problème, j'ai une dll écrite en C, compilée sous visual c++ 2008, qui, en gros, ne fait qu'appeler la fonction cos() et sin() de math.h et retourner les valeurs de ces fonctions (Au début, elle faisait plein d'autre choses mais bon, j'ai réduit au problème.)
    Quand je l'appelle à partir d'un programme C, pas de problème, j'ai les bons résultats.
    Je lui fais un wrapper et l'appelle sous matlab : les résultats sont identiques, pas de pb.
    Je lui fais un autre wrapper et je l'appelle depuis labview et là, catastrophe, quand le nombre donné en entrée est négatif, le résultat diffère de celui donné par le C et le matlab. Quand le nombre est positif, pas de problème.

    Par exemple, pour 0.78
    cos(0.78) = 0.710914 dans à partir d'appel C, matlab et labview mais pour
    cos(-0.78) = 0.710914 dans à partir d'appel Cet matlab mais cos(-0.78) = 0.776424 quand j'appelle ma dll à partir de labview.

    A votre avis, comment celà est-il possible ?

    J'ai pensé que labview pouvait avoir une fonction cos qui fonctionnerait différemment et masquerait la mienne (est-ce possible ?), j'ai donc essayé en remplaçant cos par cosl, mais c'est pas mieux.
    -Comment être certaine que j'appelle bien la fonction de math.h et pas une autre ?
    - d'autre part, si j'appelle la fonction cos des widgets de labiew, j'obtiens une réponse correcte.

    A votre avis quelle solution ?
    Poster dans le sous forum labview ?

    Merci

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    avec les prototypes de tes fonctions que tu exportes, ca aiderai un peu...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bien sûr, en gros ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern "C" MY_API int32 calculCosinus (double inNum,double *resCos, double *resSin) 
    {
      calculCosEtSin(inNum,resCos,resSin);
    return 1;
    }
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "math.h"
    void calculCosEtSin (double inNum,double *resCos, double *resSin) 
    {
       resCos=cos(inNum); //ici, c'est déjà faux
       resSin=sin(inNum);   //ici, c'est déjà faux
     
     
    }

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "math.h"
    void calculCosEtSin (double inNum,double *resCos, double *resSin) 
    {
       *resCos=cos(inNum); 
       *resSin=sin(inNum); 
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2015, 11h27
  2. Comportement différent selon le contexte
    Par Invité dans le forum Linq
    Réponses: 5
    Dernier message: 24/10/2011, 08h18
  3. Réponses: 7
    Dernier message: 15/02/2010, 21h52
  4. Comportement différent selon le lanceur
    Par michelcky dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 03/10/2008, 19h03
  5. Comportement différent selon Mode Execution
    Par MarronSuisse dans le forum C
    Réponses: 7
    Dernier message: 14/04/2008, 12h52

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