Question

en décimal (base 10), 1/3 ne peut être approximée à 0,33333 répéter.

Quel numéro est l'équivalent en binaire qui ne peut être représenté comme une approximation?

Était-ce utile?

La solution

0.1 est un exemple, ainsi que 0,2

Cette question est également similaire à cette autre SO question , qui a déjà de très bonnes réponses.

Autres conseils

Une meilleure question est de demander quels sont les numéros peuvent être représentés exactement en binaire. Tout le reste ne peut être qu'approximative ou non représentés du tout.

Voir Ce que tout informaticien doit savoir sur arithmétique en virgule flottante .

Eh bien, il y a un nombre infini qui ne peuvent être précisément représentés dans cette notation, mais voici une: 1/10

.

Je suppose que vous voulez dire demander quels nombres rationnels peut être exprimée en binaire en utilisant une représentation finie. Je déduisant ce de votre exemple de 1/3 en décimal. Le fait est que tous nombre rationnel peut être exprimé en binaire si vous permettez des représentations infinies. Mais cette question est seulement intéressant du point de vue de la science informatique si vous permettez que des représentations finies. Je suppose en outre que vous ne demandez pas sur les représentations informatiques spécifiques (par exemple, IEEE 754 ) mais plutôt simplement poser des questions sur les représentations de position générales.

Un nombre rationnel p/q avec (p, q) = 1 peut être exprimé dans une représentation finie b de base si et seulement si chaque facteur premier de q divise b. Aucun nombre irrationnel ont une représentation finie dans une base.

En particulier, un nombre rationnel p/q avec (p, q) = 1 peut être exprimée comme une représentation finie en binaire si et seulement si chaque facteur premier de q divise 2. Autrement dit, le seul des nombres rationnels p/q avec (p, q) = 1 qui ont une représentation finie en binaire sont celles où q = 2^k pour certains k entier non négatif. De plus, tous ces nombres rationnels peuvent être exprimés dans une représentation finie en binaire. Ces chiffres sont connus sous le nom dyadique rationals.

Les chiffres qui peuvent être exactement représentés dans la base 2 sont les rationals dyadique . Ce sont des chiffres qui peuvent être écrits sous la forme k / 2 ^ n pour un nombre entier k et entier n. Un nombre quelconque qui ne peut être écrit sous cette forme aura une représentation non terminale dans la base 2.

Cependant, vous semblez demander pas ce que les nombres sont représentables dans la base 2, mais plutôt ce que les nombres sont représentable dans un certain type virgule flottante fixe, tels que float ou double. Ceci est une question plus subtile; un nombre qui n'est pas rationnel dyadique ne peut pas être représenté, mais pas tous rationals dyadique peut être représenté soit.

Il est tous nombre qui ne peut être exprimé sous la forme k / 2 ^ n pour le nombre entier k et entier n.

La façon facile de trouver tous ces chiffres est d'écrire des nombres premiers qui ne comprennent pas 2. 3, 5, 7, 11, 13, 17 et 19 sont de bons exemples de nombres premiers qui ne comprennent pas 2.

Lancer la multiplication. 1/3, 2/3, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, 2/7, etc.

si vous faites cela - et vous évitez les numéros de la forme k / 2 n - vous énumérez toutes les fractions possibles qui ne peut pas être représenté exactement en binaire.

Vous devriez probablement arrêter quand vous obtenez l'énumération des numéros pour lesquels les plus à gauche 64 bits sont tous identiques.

En Python 2.4:

>>> 1.0 / 5.0
0.20000000000000001

Cela indique que la base 2 a du mal à représenter exactement.

binaire (0,00011001100110011 ...) == décimal (0,1)

Je vais prendre un coup de poignard à l'infini

Le même ensemble de nombres qui ne peuvent pas être exactement représenté par la base 10 ne peut pas exactement être représenté par la base 2. Il ne devrait pas être une différence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top