calcul de i tel que 2^(i-1)<T<=2^i - C - Programmation
Marsh Posté le 22-09-2003 à 19:18:03
sans rien comprendre a ce que tu veux je te reponds non direct
Marsh Posté le 22-09-2003 à 19:19:26
oups je me suis gouree dans le titre j ai T et je cherche i
Marsh Posté le 22-09-2003 à 19:21:54
un algo qui test a chaque fois
y a pas de formule genre avec des parties entieres et des logs en C?
Marsh Posté le 22-09-2003 à 19:22:58
?? Calcul de i ?
Si on a i, on calcule 2^(i-1) puis 2^i et on a tous les T qui respectent l'intervalle.
Sinon, il me semble que si on divise T par deux jusqu'à plus soif, on atteint i (genre division euclidienne pour décomposer en base n).
L'algo faut l'écrire...
EDIT : c'est bien i qui est cherché.
Marsh Posté le 22-09-2003 à 19:41:49
T est un integer?
Marsh Posté le 22-09-2003 à 19:56:54
ReplyMarsh Posté le 22-09-2003 à 19:57:53
ReplyMarsh Posté le 22-09-2003 à 23:01:03
version naive:
Code :
|
Je te laisse chercher la version optimisée
Il y en a une qui fait intervenir une table (pas trop grande la table sinon cache miss -> perf déplorable..) mais qui n'est pas valable dans tous les cas.
la deuxieme fait intervenir de l'assembleur (BSR) mais c'est pas la bonne sous catégorie et c'est spécifique à une plateforme.
A+
LeGreg
Marsh Posté le 23-09-2003 à 00:31:43
ceil(log2(T)) non
Marsh Posté le 23-09-2003 à 03:03:16
A vérifier :
2^(i-1) < T <= 2^i
<=> ln (2^(i-1)) < ln(T) <= ln(2^i)
<=> (i-1) ln 2 < ln(T) <= i ln 2
<=> i-1 < ln(T) / ln 2 <= i
<=> i-1 < ln(T) / ln 2 et i >= ln (T) / ln 2
<=> i < ln(T) / ln 2 + 1 et i >= ln (T) / ln 2
<=> i < log(2) (T) + 1 et i >= log(2) (T) (log(2) = log en base 2)
Edit : c'est peut-etre ce que signifie ceil(log2(T)).
Edit 2 : en effet, c'est bien ça.
Marsh Posté le 23-09-2003 à 03:12:44
On a bien compris que c'était un log2 qu'il voulait faire
mais vous ne répondez pas à la question..
LeGreg
Marsh Posté le 23-09-2003 à 11:31:17
log2 (T) = ln(T) / ln(2)
en C, ln se traduit par la fonction log, donc il faut faire
log(T) / log(2) ou log2(T)
Comme Belgique en fait.
Marsh Posté le 23-09-2003 à 11:43:42
legreg a écrit : On a bien compris que c'était un log2 qu'il voulait faire |
Tu peux mieux m'expliquer, je ne comprends pas trop ce qui est demandé.
Marsh Posté le 23-09-2003 à 11:49:32
Belgique a écrit : |
La question d'apres le titre :
comment faire pour trouver i tel que 2^(i-1)<T<=2^i ?
ce qui correspond bien à un log entier mais dans le cas d'une puissance de deux, c'est probablement overkill de passer par la double conversion int->double->int et la fonction log.
d'ou la formulation naive avec une simple boucle et décalage et la forme avec l'assembleur inline.
A+
LeGreg
Marsh Posté le 23-09-2003 à 14:11:54
Le greg:
Dans un but pédagogique pourrait-tu dérouler le fonctionnement de ton algo ?
D'avance merci.
Marsh Posté le 26-09-2003 à 21:02:41
merci merci
apparemment tout est dans la librairie maths...
log, puissances
mais comme dans les sources qu on me fournit on se sert de decalages... j ai fait une boucle for
Marsh Posté le 22-09-2003 à 19:17:09
y a-t-il une formule toute faite?
Message édité par theorie du chaos le 22-09-2003 à 19:19:41