un petit prog qui marche mais ne marche pas !!! - C - Programmation
Marsh Posté le 01-07-2006 à 21:32:38
De tête et excusez moi si je dis une bêtise, je ne suis pas sûr que la fonction pow ait un prototype avec des types 'long'.
Si tu prends des double au lieu de prendre des long, tu as la même erreur?
Marsh Posté le 01-07-2006 à 21:37:07
GrosBocdel a écrit : De tête et excusez moi si je dis une bêtise, je ne suis pas sûr que la fonction pow ait un prototype avec des types 'long'. |
Non, t'as tout à fait raison. "pow" (comme toutes les fonctions de la librairie "libm" ) travaille avec des doubles et renvoie un double (et il faut éviter d'élever un nombre négatif à une puissance "x/y" avec y pair et non diviseur de "x" car cela mène à un nombre complexe)
Marsh Posté le 02-07-2006 à 00:46:12
j'en avais fait une basique avec des pointeur de fonctions
Code :
|
Marsh Posté le 02-07-2006 à 12:16:31
ça fait plaisir de voir que tu as lu le dit PDF. Pas la peine de revenir quand tu trouveras une autre combinaison qui te donne un résultat faux avec double.
Marsh Posté le 02-07-2006 à 12:20:55
le pire finalement c'est perl où mêmes les int sont représentés par des double ... c'est très drôle.
Marsh Posté le 02-07-2006 à 13:38:56
Mais non mais il faut quand même que la réponse soit adaptée à la question, Taz, quand même.
Le pdf dont tu as donné l'adresse, personnellement il y a des chances que je le lise. Mais donner à lire un document de 40 pages où un gars se bat avec des epsilon alors que tu vois bien que big_dadi_fat doit en être à ses première lignes de C, admets que c'est inadapté !
Mais quand on est confronté à des erreurs d'arrondi de meeeeeeeeeeeeeeeeerde, ce document est bien, oui.
Marsh Posté le 02-07-2006 à 13:48:06
Le document est la spec IEEE. Plutôt indigeste mais apportant des informations nécessaires.
Marsh Posté le 02-07-2006 à 13:50:20
GrosBocdel a écrit : Mais non mais il faut quand même que la réponse soit adaptée à la question, Taz, quand même. |
ce document et bien , je suis entrain de le lire.
mais bon cértain chose m'aichape
Marsh Posté le 02-07-2006 à 16:14:05
En plus il est en anglais ce pdf, déjà que les maths en français c'est pas simple, alors en anglais : a+
Marsh Posté le 02-07-2006 à 16:27:29
si t'es bon ni en englais, ni en math, t'es bon en quoi?
Marsh Posté le 02-07-2006 à 16:32:46
jagstang a écrit : si t'es bon ni en englais, ni en math, t'es bon en quoi? |
En tout cas, toi t'es pas bon en français
J'ai pas dit que j'étais mauvais en maths et en anglais, juste que les maths c'était pas simple et encore moins en anglais. Nan vraiment, le français c'est pas ton truc
Marsh Posté le 02-07-2006 à 16:49:12
_kal_ a écrit : En tout cas, toi t'es pas bon en français |
l'église qui si fout de la charité... Allez a+ petit
Marsh Posté le 02-07-2006 à 18:28:02
ReplyMarsh Posté le 02-07-2006 à 20:08:44
GrosBocdel a écrit : Mais non mais il faut quand même que la réponse soit adaptée à la question, Taz, quand même. |
tu le lis une fois et après tu ne te poses plus de question. Il n'y pas d'erreur d'arrondi. Au final tu vois bien que la réponse au problème c'est 'passe en double' et c'est ça l'erreur.
Marsh Posté le 02-07-2006 à 20:39:23
Je vais le lire, faut juste me laisser le temps. C'est vrai que la problématique est intéressante. J'ai déjà été confronté à ce genre de choses pour mon boulot, avec des inversions de matrices creuses où fortran et C partaient dans le décors. La solution temporaire était de passer sous matlab qui s'en sortait bien.
On m'avait dit de me tourner vers les routines de calcul en précision arbitraire, il va aussi falloir que je m'y colle.
Marsh Posté le 02-07-2006 à 22:27:56
Taz a écrit : tu le lis une fois et après tu ne te poses plus de question. Il n'y pas d'erreur d'arrondi. Au final tu vois bien que la réponse au problème c'est 'passe en double' et c'est ça l'erreur. |
Tu peux pas nier que la fonction "pow()" veut impérativement des doubles. Donc la solution est soit:
1) de travailler entièrement avec des doubles (ce qui, soit dit en passant, apporte aussi une amélioration dans la division)
2) de faire un cast lors de l'appel à pow()
3) de s'implémenter son petit "pow" perso qui travaille avec des int
Marsh Posté le 02-07-2006 à 22:46:52
mais je ne le nis absolument pas. seulement la solution 3 me semble de moins la plus correcte si.
Marsh Posté le 02-07-2006 à 22:53:39
slash33 a écrit : Le document est la spec IEEE. |
Euuh absolument pas non
Marsh Posté le 02-07-2006 à 23:48:44
Taz en premiere réponse ! le pauvre dadi_fat, il a vraiment pas de pow
Marsh Posté le 02-07-2006 à 23:53:56
Harkonnen a écrit : Taz en premiere réponse ! le pauvre dadi_fat, il a vraiment pas de pow |
Marsh Posté le 03-07-2006 à 08:18:56
GrosBocdel a écrit : Je vais le lire, faut juste me laisser le temps. C'est vrai que la problématique est intéressante. J'ai déjà été confronté à ce genre de choses pour mon boulot, avec des inversions de matrices creuses où fortran et C partaient dans le décors. La solution temporaire était de passer sous matlab qui s'en sortait bien. |
Pas forcément, il faut utiliser les bonnes librairies de calcul (celles qui sont utilisées par Matlab).
Marsh Posté le 03-07-2006 à 10:54:18
Reply
Marsh Posté le 01-07-2006 à 15:54:35
Bonjour
Voila j'ai fait une calculatrice en C dont voila le code :
Le probleme est que quand je fais les puissances certaine donne un résultat faux comme 5 puissance 2 qui donne 24 au lieu de 25.
pourtant c'est un programme tés facil et je ne vois pas l'erreur !
merci