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 :

declaration de tableau de flottant


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Par défaut
    Bonjour,
    j'ai eu une erreur a l'execution sur la ligne
    alors que l'allocation dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float *tab = (float*)malloc(500*500*3*sizeof(float));
    passe tres bien.
    est-ce normal ? y-a-t-il une taille max pour les allocation statiques ?

    precision : je travaille sous win avec devcpp (je sais, je devrai passer sous code::block )
    merci

    P.S. le programme quitte simplement a l'execution
    par d'erreur a la compil ni au link

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    malloc utilise le tas alors que les variables automatiques piochent dans la pile.

    C'est surement à ce niveau là.

    Parce que 750 000 * sizeof float (4 typiquement) octets dans la pile ça doit peut-etre faire beaucoup.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par straasha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float *tab = (float*)malloc(500*500*3*sizeof(float));
    remplace ce que tu as écrit par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float *tab = malloc(500*500*3*sizeof(*tab));
    le cast ne sert à rien et si tu changes le type de tab (par exemple en double), tu n'auras rien d'autre à modifier dans ton code.

  4. #4
    Membre chevronné Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Par défaut
    Skyrunner : c'est surement ca, j'ai egalement un tableau d'unsigned char de la meme taille (en nombre de donnee) qui est declare en statique, il se peut que la taille des 2 tableaux depasse le celle de la pile. je regarderai plus en detail ce soir.
    merci


    salseropom : merci, j'y penserai la prochaine fois

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 175
    Par défaut
    Bonjour,

    j'essaie d'afficher le plus petit float possible avec la constante défini dans float.h,

    mais j'obtiens 0 comme résultat, une idée ?

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par oranoutan
    Bonjour,

    j'essaie d'afficher le plus petit float possible avec la constante défini dans float.h,

    mais j'obtiens 0 comme résultat, une idée ?
    C'est dû à la précision.

    Essaye avec %e.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par oranoutan
    j'essaie d'afficher le plus petit float possible avec la constante défini dans float.h,
    mais j'obtiens 0 comme résultat, une idée ?
    C'est normal, tu n'utilises pas le bon format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <stdio.h>
    #include <float.h>
     
    int main (void)
    {
       printf("%e\n", FLT_MIN);
       printf("%f\n", FLT_MIN);
       printf("%.55f\n", FLT_MIN);
       printf("%g\n", FLT_MIN);
     
       printf("%e\n", DBL_MIN);
       printf("%f\n", DBL_MIN);
       printf("%.325f\n", DBL_MIN);
       printf("%g\n", DBL_MIN);
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 175
    Par défaut
    c'est possible en jouant avec le nombre de décimal après la virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Float min = %.39f", FLT_MIN);

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par straasha
    j'ai eu une erreur a l'execution sur la ligne
    <...>
    est-ce normal ?
    Oui, si tab est une variable automatique (la ressource 'mémoire automatique' est très limitée).

    Rappel : http://emmanuel-delahaye.developpez....es.htm#donnees

    y-a-t-il une taille max pour les allocation statiques ?
    Oui, et elle dépend de l'implémentation. La norme définit des minimas :
    • C90 : 32768 bytes
    • C99 : 65536 bytes

    Mais si on parle de mémoire automatique, ça peut être beaucoup moins. En fait, il n'y a aucune garantie qu'un variable automatique soit valide. Dans la pratique, tant qu'on reste en dessous d'une 100aine d'octets (voire moins en embarqué), il n'y a aucun risque... Question de feeling ... et de taille de pile (si cette notion existe sur la plateforme concernée)...
    precision : je travaille sous win avec devcpp (je sais, je devrai passer sous code::block )
    Ca ne changera rien pour ton problème (même compilateur).

Discussions similaires

  1. Ocaml-> C: tableau de flottant en paramètre
    Par Cooky dans le forum Caml
    Réponses: 2
    Dernier message: 26/08/2007, 13h31
  2. Help prob de declaration de tableau global
    Par JeFF Boss dans le forum C++
    Réponses: 4
    Dernier message: 11/04/2007, 12h14
  3. Où et Comment declarer un tableau
    Par Terminator dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 05/04/2006, 14h48
  4. Réponses: 4
    Dernier message: 09/03/2006, 09h50
  5. Réponses: 13
    Dernier message: 27/12/2005, 09h17

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