Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1719 connectés 

  FORUM HardWare.fr
  Programmation
  C

  double vs long double

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

double vs long double

n°1389233
julien_54
Posté le 16-06-2006 à 16:34:13  profilanswer
 

Bonjour,
 
j'ai fait un programme qui manipule des double. Malheureusement, sur de gros exemples de traitements, j'obtient un dépassement...  :sweat:  
 
Don mon premier reflexe est de remplacer ce double par un long double ...  
 
Ma question est de savoir si cela ne pose pas un problème, car il me semble que ce type n'est pas tres standard ...? Y a t'il des problèmes connus  
avec ce genre de type de données (selon le processeur, le systeme d'exploitation,...) ?  
 
Sinon auriez-vous une autre idée pour résoudre le problème (sachant que je passe déjà par le log...) ?
 
Merci  :jap:

mood
Publicité
Posté le 16-06-2006 à 16:34:13  profilanswer
 

n°1389278
Elmoricq
Modérateur
Posté le 16-06-2006 à 17:04:44  profilanswer
 

Le type "long double" est défini dans la norme C89, il faut donc chercher un compilateur antédiluvien pour que ce ne soit pas reconnu. :)
 
Après, si long double n'est pas suffisant, il te faudra peut-être utiliser/développer une bibliothèque mathématique spécialisée dans les très grands nombres.

Message cité 2 fois
Message édité par Elmoricq le 16-06-2006 à 17:05:59
n°1389286
julien_54
Posté le 16-06-2006 à 17:13:29  profilanswer
 

Elmoricq a écrit :

Le type "long double" est défini dans la norme C89, il faut donc chercher un compilateur antédiluvien pour que ce ne soit pas reconnu. :)
 
Après, si long double n'est pas suffisant, il te faudra peut-être utiliser/développer une bibliothèque mathématique spécialisée dans les très grands nombres.


 
ok merci !

n°1389292
Elmoricq
Modérateur
Posté le 16-06-2006 à 17:23:19  profilanswer
 

Fais tout de même attention : en C, seules les tailles minimum des types sont définies, pas les tailles maximum.
 
Par exemple, il est dit qu'un entier de type "int" doit mesurer au minimum 16 bits.
A l'heure actuelle, "int" pèse souvent 32 bits, et sans doute déjà 64 sur pas mal de système. Mais la norme, c'est 16 bits.
 
Ce qui signifie qu'il faut que tu fasses attention à te limiter à la norme quant à la plage utilisable, si tu tiens à faire quelque chose de portable.

n°1389296
julien_54
Posté le 16-06-2006 à 17:29:03  profilanswer
 

effectivement il va falloir que je me penche la dessus !  
 
Merci pour ces eclaircissements :)

n°1389431
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-06-2006 à 22:34:07  profilanswer
 

Elmoricq a écrit :

Le type "long double" est défini dans la norme C89,


Tu es sûr de ça ? Je ne connais pas de fonctions maths spécialisées pour ça dans la bibliothèque standard du C90. Par contre, en C99, oui.
 
Par exemple : http://www-ccs.ucsd.edu/c/math.html
 
On voit bien que les fonctions avec long double sont notées 'C++ only'.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 16-06-2006 à 22:36:44

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1389451
skelter
Posté le 16-06-2006 à 23:12:11  profilanswer
 

Emmanuel Delahaye a écrit :

Tu es sûr de ça ? Je ne connais pas de fonctions maths spécialisées pour ça dans la bibliothèque standard du C90. Par contre, en C99, oui.


 
je n'ai pas k&r ni le standard pour verifier, mais d'apres wikipedia fr c'est bien c89 (et n'existe pas en pre-ansi)
http://fr.wikipedia.org/wiki/C_%28langage%29#Types
 
edit: d'ailleur avec gcc je compiles toujours en -ansi et il m'arrive d'utiliser 'long double' sans probleme

Message cité 1 fois
Message édité par skelter le 16-06-2006 à 23:13:51
n°1389462
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-06-2006 à 23:23:54  profilanswer
 

skelter a écrit :

je n'ai pas k&r ni le standard pour verifier, mais d'apres wikipedia fr c'est bien c89 (et n'existe pas en pre-ansi)
http://fr.wikipedia.org/wiki/C_%28langage%29#Types


C'est écrit :  

Citation :

Types à virgule flottante : float, double, long double (C89)


Ca ressemble fort à une typo... Je le verrais comme ça...

Citation :

Types à virgule flottante : float, double, long double (C99)


Wikipedia, c'est plein de bugs. J'en ai corrigé quelques uns (comme les >= au lieu de = dans la même page), mais il en reste sûrement...
 
EDIT: OK, d'après mon K&R edition 2, le type long double existe bien en C89/C90.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 16-06-2006 à 23:26:31

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1389472
skelter
Posté le 16-06-2006 à 23:32:38  profilanswer
 

Citation :

Ca ressemble fort à une typo... Je le verrais comme ça...


 
pas forcement, le fait de preciser c89 peut simplement vouloir dire que c'est une nouveauté apporté par le standard comme void et const
 

Citation :

Wikipedia, c'est plein de bugs. J'en ai corrigé quelques uns (comme les >= au lieu de = dans la même page), mais il en reste sûrement...


 
absolument, le feedback sur wikipedia est rapide pour le gros mais dans le details des erreurs peuvent trainer des mois, voir des annees. J'attendais que tu confirmes si tu avais k&r ou le standard sous la main (et corriger wikipedia si besoin).


Message édité par skelter le 16-06-2006 à 23:33:23
n°1389511
Taz
bisounours-codeur
Posté le 17-06-2006 à 02:44:58  profilanswer
 

quel genre de dépassement ? ne devrait tu tout simplement pas changer d'algorithme ?
 
deux cas possibles :
- tu constates une perte de précision sur par exemple une somme. Il y a beaucoup de travaux qui montre que for ( ... ) { sum += data[i] } est une très mauvaise méthode. Tu peux trouver sur le net des tas d'autres algorithmes bien meilleurs qui limitent la perte de précision. Ce genre de problème apparaît dans beaucoup d'autres algorithmes numériques.
 
- logarithme est ton ami

mood
Publicité
Posté le 17-06-2006 à 02:44:58  profilanswer
 

n°1389522
el muchach​o
Comfortably Numb
Posté le 17-06-2006 à 03:16:04  profilanswer
 

Oui, et quelques fois, il est bon de réordonner les opérations commutatives pour limiter les pertes. Par ex. si dans un calcul il y a plein de multiplications suivies d'un tas de divisions, (ou des additions suivies de soustractions), réfléchir à les alterner ou les grouper de façon intelligente pour limiter les pertes.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1389608
simple_stu​pid
Keep It Simple Stupid
Posté le 17-06-2006 à 12:06:11  profilanswer
 

Emmanuel Delahaye a écrit :


EDIT: OK, d'après mon K&R edition 2, le type long double existe bien en C89/C90.


Il me semble que c'est long long int qui a été introduit en C99.

n°1390277
julien_54
Posté le 19-06-2006 à 10:07:38  profilanswer
 

Taz a écrit :

quel genre de dépassement ? ne devrait tu tout simplement pas changer d'algorithme ?
 
deux cas possibles :
- tu constates une perte de précision sur par exemple une somme. Il y a beaucoup de travaux qui montre que for ( ... ) { sum += data[i] } est une très mauvaise méthode. Tu peux trouver sur le net des tas d'autres algorithmes bien meilleurs qui limitent la perte de précision. Ce genre de problème apparaît dans beaucoup d'autres algorithmes numériques.
 
- logarithme est ton ami


 
Je passe déjà en log ... :jap:

n°1390282
julien_54
Posté le 19-06-2006 à 10:10:22  profilanswer
 

En fait l'erreur est réparée ... Merci beaucoup tout le monde !

n°1397627
SBAM
Best recording of rach 3.
Posté le 30-06-2006 à 01:33:14  profilanswer
 

julien_54 a écrit :

En fait l'erreur est réparée ... Merci beaucoup tout le monde !


Elle etait ou ta division par 0 ?  :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  double vs long double

 

Sujets relatifs
Editer un champ "texte long" dans une DB SQL avec entrerise managementproblème d'écriture (double guillemets) SELECT values[résolu]
Excel VBA - Double cliqueecrire un long titre dans une page excel en php
Entier long... [Matlab]Comment éviter d'avoir une de timeout pour un traitement long
Arrondir un doubleEntier long
[c]Code format d'un double %f ou %lf ? Ou avoir + d'info sur long? 
Plus de sujets relatifs à : double vs long double


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR