2017-10-12 15 views
-2

Lorsque j'ai essayé de trouver la réponse, je suis tombé sur ceci et je me demandais si cela était vrai et pourquoi.Explication pour déterminer si un nombre décimal a une représentation finie dans une base

https://stackoverflow.com/a/489870/5712298

Si quelqu'un peut me l'expliquer ou me créer un lien vers une page expliquant ce serait génial.

+0

La réponse que vous avez liée détermine si une valeur décimale peut être représentée exactement dans _binary-virgule flottante, bien que la réponse indique simplement _binary_, qui en soi est ambigu. En tant que tel, le titre de votre question doit peut-être changer, il est très spécifique aux représentations de point flottant plutôt que simplement "_a base_". – Clifford

+0

Je pense qu'il y a une erreur dans la description de la méthode sur le lien, voir mon commentaire ajouté. – Clifford

Répondre

1

balisage Stackoverflow ne supporte pas la notation mathématique bien, et la plupart des lecteurs de ce sera programmeurs, donc je vais utiliser la syntaxe d'expression de programmation commune:

* multiplication 
^ exponentiation 
/division 
x[i] Element i of an array x 
== equality 
PROD product 

Cette traite de la question de savoir si, étant donné un radix r terminant fraction a/(r^n), il y a une terminaison radix s fraction b/(s^m) avec exactement la même valeur, a, b entiers, r et s des nombres entiers positifs, et nm intege non négatif rs.

a/(r^n)==b/(s^m) est équivalent à b==a*(s^m)/(r^n). a/(r^n) est exactement égale à une certaine fraction de terminaison s si, et seulement si, il existe un entier positif m tel que a*(s^m)/(r^n) est un nombre entier. Considérons la factorisation première de r, PROD(p[i]^k[i])

Si, pour certains i, p[i]^k[i] est un terme dans la factorisation première de r, alors p[i]^(n*k[i]) est un terme dans la factorisation première de r^n.

a*(s^m)/(r^n) est un entier si, et seulement si, tous les p[i]^(n*k[i]) dans la factorisation de r^n est aussi un facteur de a*(s^m)

premier suppose p[i] est également un facteur de s. Ensuite, pour m suffisamment grand, p[i]^(n*k[i]) est un facteur de s^m.

Supposons maintenant p[i] n'est pas un facteur de s. p[i]^(n*k[i]) est un facteur de a*(s^m) si, et seulement si, c'est un facteur de a.

La condition nécessaire et suffisante pour l'existence d'un nombre entier non négatif m de telle sorte que b==a*(s^m)/(r^n) est un nombre entier est que, pour chaque p[i]^k[i] dans la factorisation de r, soit p[i] est un facteur de s ou p[i]^(n*k[i]) est un facteur de a.

Appliqué à l'affaire commune de r=10 et s=2, la factorisation de r est (2^1)*(5^1). 2 est un facteur de 2, donc nous pouvons l'ignorer. 5 n'est pas, nous avons donc besoin de 5^n pour être un facteur de a.

Tenir compte des cas particuliers:

décimal 0.1 est 1/10, 5 n'est pas facteur de 1, donc il n'y a pas d'équivalent de fraction binaire exacte.

Décimal 0.625, 625/(10^3). 5^3 est 125, ce qui est un facteur de 625, donc il y a un équivalent exact de la fraction binaire. (C'est binaire 0.101).

La méthode dans la réponse référencée https://stackoverflow.com/a/489870/5712298 est équivalente à celle-ci pour décimal à binaire. Il faudrait un peu de travail pour étendre au cas général, pour tenir compte des facteurs premiers dont l'exposant n'est pas 1.