Pergunta

decimal (base 10), 1/3 só pode ser aproximada a 0,33333 repetindo.

O número é o equivalente em binário que só pode ser representado como uma aproximação?

Foi útil?

Solução

0,1 é um exemplo deste tipo, bem como 0,2

Esta questão também é semelhante ao essa outra SO pergunta , que já tem muito boas respostas.

Outras dicas

Uma pergunta melhor é perguntar o que os números pode ser representado exatamente em binário. Tudo o resto só pode ser aproximada ou não representados em tudo.

Veja cientista O que cada computador deve saber sobre aritmética de ponto flutuante .

Bem, existem infinitos números que não podem ser precisamente representados nesse notação, mas aqui está um:. 1/10

Estou assumindo que você quer dizer para perguntar que números racionais pode ser expresso em binário usando uma representação finita. Eu estou deduzindo isso de seu exemplo de 1/3 em decimal. O fato é que todas número racional pode ser expresso em binário se você permitir representações infinitas. Mas esta questão só é interessante do ponto de vista de ciência da computação, se permitir apenas representações finitas. Estou assumindo ainda que você não está perguntando sobre representações de computador específicos (por exemplo, IEEE 754 ), mas em vez meramente perguntando sobre representações posicionais gerais.

Um número p/q racional com (p, q) = 1 pode ser expressa uma representação finita em b base, se e somente se cada fator principal de divisões q b. Não há números irracionais têm uma representação finita em qualquer base.

Em particular, um número p/q racional com (p, q) = 1 pode ser expressa como uma representação finita em binário se e somente se cada fator principal de divisões q 2. Ou seja, os números única racionais p/q com (p, q) = 1 que têm uma representação finita em binário são aqueles onde q = 2^k por algum k inteiro não negativo. Além disso, todos estes números racionais pode ser expresso em uma representação finita em binário. Estes números são conhecidos como dyadic rationals .

Os números que podem ser representados exatamente na base 2 são os rationals diádicos . Estes são números que podem ser escritos sob a forma de k / 2 ^ n por algum inteiro k e o número inteiro n. Qualquer número que não pode ser escrito dessa forma terá uma representação de não-encerramento na base 2.

No entanto, você parece estar pedindo para não sobre o que os números são representável na base 2, mas sim o que os números são representável em algum tipo de ponto flutuante fixo, como float ou double. Esta é uma questão mais sutil; qualquer número que não é uma lata racional diádico não ser representado, mas nem todos os rationals diádicos pode ser representado também.

de todas número que não pode ser expressa como k / 2 ^ n para k inteiro e número inteiro n.

A maneira mais fácil de encontrar todos esses números é anotar alguns números primos que não incluem 2. 3, 5, 7, 11, 13, 17 e 19 são bons exemplos de números primos que não incluem 2.

Iniciar multiplicador. 1/3, 2/3, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, 2/7, etc.

Se você fizer isso - e você evita números da forma k / 2 ^ n - você vai enumerar cada fração possível que não podem ser representados exatamente em binário.

Você provavelmente deve parar de enumerar quando você chegar ao número para o qual a maioria dos restantes 64 bits são todos idênticos.

Em Python 2.4:

>>> 1.0 / 5.0
0.20000000000000001

Isso indica que base 2 tem um tempo difícil representá-lo exatamente.

binário (,00011001100110011 ...) == decimal (0,1)

Eu vou tomar uma facada no infinito

O mesmo conjunto de números que não podem ser exatamente representado por base 10 pode não exatamente ser representado por base 2. Não deve haver uma diferença lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top