1.0/3.0 c'est 1/3? soit 0.3333?
Envoyé par sandball22ATTENTION: En C, 1/3 est une division entière dont la valeur est 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1.0/3.0 == 1.0/3 == 0.333333<...>
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Bonjour,
Je ne sais pas si c'est très pertinent ni même plus rapide que les divisions successive par 2 présentée par Mujigka mais je tente quand même...
Soit la fonction f(n) qui pour tout entier n != 0 donne le nombre chiffre pouvant le représenter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /* Calcul du nombre minimal de bits nécessaires pour représenter l'entier considéré */ if (n >= 0) { do { n /= 2; MIN_BITS++; } while (n > 0); } else { MIN_BITS = MAX_BITS; }
f(n) = floor( log10(abs(n)) + 1)
Exemple avec -956 :
f(-956) = 3 ( oui je sais tout le monde avait vu que -956 avait trois chiffres )
Partant de ça, on a aussi la fonction suivante, g(n) qui nous donne le nombre minimal de bits pour un entier n != 0:
g(n) = ceil( (f(n) -1 ) / log10(2) )
[ pour le maximum : ceil( (f(n) ) / log10(2) ) ]
Ex avec 956 :
nombre minimal de bits : ceil ( 2 / log10(2) ) = ceil ( 6,64...) = 7 bits
nombre maximal de bits : ceil ( 3 / log10(2) ) = ceil ( 9.96..) = 10 bits
Effectivement, 956(10) = 1110111100(2) soit 10 bits.
Exemple avec la plage des nombres à 3 ou 4 chiffres en utilisant les formules :
100 à 999 : 7 à 10 bits
1000 à 9999 : 10 à 14 bits
après je ne sais pas si c'est plus rapide / efficient que la méthode des divisions... (et j'espère ne pas m'être trompé non plus... ).
La méthode des divisions revient à faire MIN_BITS = log10(number)/log10(2) + 1. Je ne me suis pas occupé de savoir ce qui était le plus rapide.
En revanche, il n'est pas nécessaire d'effectuer le calcul pour les nombres négatifs, car ceux-ci sont toujours représentés sur sizeof(int) * CHAR_BIT bits, quelle que soit la représentation en complément à 2, ou en complément à 1.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager