abs - C++ - Programmation
Marsh Posté le 13-06-2005 à 14:45:06
float(abs(a-b)) me rend un entier,moi je cherche à garder les float et calculer leur valeurs absolue
j'ai pas compris ta réponse Taz
Marsh Posté le 13-06-2005 à 14:56:24
d_imane a écrit : j'ai pas compris ta réponse Taz |
Ben c'est pourtant simple ?
std::abs() fait ce que tu souhaites.
Marsh Posté le 13-06-2005 à 14:58:45
Code :
|
fabs c'est le truc C parce que y a pas de surcharge. utilise std::abs sur n'importe quoi et ça ira.
Marsh Posté le 13-06-2005 à 15:03:42
maintenant c'est beaucoup plus clair, je retiens ta proposition, merci
Marsh Posté le 13-06-2005 à 15:13:17
but...il m'as sotie un message d'erreur
Code :
|
error C2039: 'abs' : is not a member of 'std'
Marsh Posté le 13-06-2005 à 15:21:33
si si j'ai utilisé
Code :
|
Marsh Posté le 13-06-2005 à 15:23:20
je parie que tu utilises Borland VC
Marsh Posté le 13-06-2005 à 15:26:17
très simplement, tu peux encore améliorer :
Code :
|
Marsh Posté le 13-06-2005 à 15:39:15
quand ça marchera,
tu pourras même tout faire en évitant le stockage temporaire
et avec deux fois moins d'itérations.
Marsh Posté le 13-06-2005 à 16:05:20
j'ai utliliser exactement ta fct Taz, et j'ai tjs le meme message d'erreur:'abs' : is not a member of 'std'
j'ulilise la biblio
Code :
|
Marsh Posté le 13-06-2005 à 17:36:47
Code :
|
pour faire joli
Marsh Posté le 13-06-2005 à 18:53:00
ok (...)
Code :
|
Marsh Posté le 13-06-2005 à 18:57:53
c'est très très lent ton truc : tu maintiens un ordre pour rien.
edit : et tu as un recopies inutile. Seul avantage par rapport à la méthode initiale : ça ne fuit pas
Marsh Posté le 13-06-2005 à 19:01:06
mais qu'il est lourd celui là....
c'est pour le fun j'ai dit.
la solution la plus efficace est évidente
Marsh Posté le 13-06-2005 à 19:10:32
pour le fun aussi , histoire d'user le pauvre valarray
Code :
|
edit: c'est quand meme une meilleur soltution ?
Marsh Posté le 13-06-2005 à 19:15:11
c toujours bon les solutions en 3 lignes
pour info, dans le files de priorité*, c'est le popage des éléments qui est lent plutôt que leur pushage (facteur 3 avec un vector, 10 avec une deque (dans des tailles cahemissables))
Marsh Posté le 13-06-2005 à 19:23:28
Code :
|
quant à ton histoire de pop plus lent que push, elle ne veut rien dire, vu que ça dépend très largement de l'implémentation.
edit : avec un tas, on a d'ailleurs o(log(n)) en insertion et suppression
edit2 : encore heureux que top() est o(1)
Marsh Posté le 14-06-2005 à 10:01:24
ReplyMarsh Posté le 14-06-2005 à 11:07:38
Taz a écrit : |
teste avant d'être trop péremptoire....
quand à ton dernier code j'ai bien peur qu'il soir complètement faux.
Marsh Posté le 14-06-2005 à 11:10:51
je comprends pas de quoi tu parles : vu que tu fais n push() et 1 top(), et que top() est o(1), tu te mouilles pas trop en disant que c'est les push() qui prennent du temps.
après on s'en fout que ça soit juste ou pas, c'est son algo après tout.
Marsh Posté le 14-06-2005 à 11:21:21
justement,
je suis peut être pas très clair,
mais (chez moi, sur ma machine....)
aussi bizarre que cela puisse paraître
ce sont les pop qui prennent du temps
Marsh Posté le 14-06-2005 à 11:59:36
ben non.
utilisation mémoire : n
complexité : n x log(n)
alors que l'opération est clairement o(n). C'est la pire des solutions proposées ici.
Marsh Posté le 14-06-2005 à 13:26:41
d'après ton code :
v : n'est jamais (strictement) négatif
si x[0] est négatif,
v<min : est toujours faux,
ta boucle ne sert à rien.
pour *x==-1e9f, ton code renvoit mediane - 1 millard quelles que soient les valeurs du tableau (et y'a un autre petit problème)
edit 'f','t','a'
Marsh Posté le 14-06-2005 à 13:53:36
encore une fois on s'en bat de son algo à la con, je sais pas ce que tu cherches à prouver.
Marsh Posté le 14-06-2005 à 14:54:40
Si on revenait au pb de départ ??? Calculer une valeur absolue d'un type float
Question à 15 et un mars : "Quelle est la différence entre -3.14f et 3.14f ?"
Alors...
Réponse : le bit de poid fort.
Comme une variable de type float est codée sur 4 octets, on peut donc créer sa propre fonction fabs qui remet à zéro ce bit.
Code :
|
Marsh Posté le 13-06-2005 à 14:29:51
Bonjour à tous,
Coment faire pour calculer la valeur absolue de deux float?
Merci