calcul de i tel que 2^(i-1)<T<=2^i

calcul de i tel que 2^(i-1)<T<=2^i - C - Programmation

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
Reply

Marsh Posté le 22-09-2003 à 19:17:09   

Reply

Marsh Posté le 22-09-2003 à 19:18:03    

[:xx_xx]
 
sans rien comprendre a ce que tu veux je te reponds non direct [:ddr555]


Message édité par chrisbk le 22-09-2003 à 19:18:24
Reply

Marsh Posté le 22-09-2003 à 19:19:26    

oups je me suis gouree dans le titre :D j ai T et je cherche i :D

Reply

Marsh Posté le 22-09-2003 à 19:20:47    

ben 0, 1, etc

Reply

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? :ange:

Reply

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é. :)


Message édité par Carbon_14 le 22-09-2003 à 19:23:49
Reply

Marsh Posté le 22-09-2003 à 19:41:49    

T est un integer?


---------------
You have the right to remain silent. You are warned that anything you say can will be taken down used as evidence against you///Il n'y a pas de théorie de l'évolution. Juste une liste d'espèces que Chuck Norris autorise à survivre.
Reply

Marsh Posté le 22-09-2003 à 19:56:54    

Angel_Dooglas a écrit :

T est un integer?


:non:
 
t'es un integriste ? [:aloy]
 
 
 
vivi, je sais, ->[]

Reply

Marsh Posté le 22-09-2003 à 19:57:53    

Angel_Dooglas a écrit :

T est un integer?

God is real until declared as integer.

Reply

Marsh Posté le 22-09-2003 à 23:01:03    

version naive:

Code :
  1. if (T <= 1)
  2.    return "impossible"
  3. for (i = 0; (1 << i) < T; i++);


 
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

Reply

Marsh Posté le 22-09-2003 à 23:01:03   

Reply

Marsh Posté le 23-09-2003 à 00:31:43    

ceil(log2(T)) non  :??:


Message édité par belgique le 23-09-2003 à 00:32:48
Reply

Marsh Posté le 23-09-2003 à 00:58:06    

+1, comme Belgique

Reply

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. :D


Message édité par charly007 le 23-09-2003 à 03:12:38
Reply

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

Reply

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. :D


Message édité par charly007 le 23-09-2003 à 11:50:08
Reply

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
mais vous ne répondez pas à la question..
 
LeGreg


Tu peux mieux m'expliquer, je ne comprends pas trop ce qui est demandé.

Reply

Marsh Posté le 23-09-2003 à 11:49:32    

Belgique a écrit :


Tu peux mieux m'expliquer, je ne comprends pas trop ce qui est demandé.


 
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

Reply

Marsh Posté le 23-09-2003 à 12:48:11    

Ok, merci, je me disais bien  :D

Reply

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.

Reply

Marsh Posté le 26-09-2003 à 21:02:41    

merci merci :)
 
apparemment tout est dans la librairie maths...
log, puissances :D
 
mais comme dans les sources qu on me fournit on se sert de decalages... j ai fait une boucle for :jap:

Reply

Marsh Posté le 26-09-2003 à 21:03:49    

I=1;
while ((1<<I) < size)
 I++;
 
 
ca ira tres bien :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed