Qual é a diferença entre o tipo de dados float e integer quando o tamanho é o mesmo?

Qual a diferença entre o tipo de dados float e integer quando o tamanho é o mesmo?

  • float armazena valores de ponto flutuante, ou seja, valores que têm possíveis casas decimais
  • int armazena apenas valores integrais, isto é, números inteiros

Portanto, embora ambos tenham 32 bits de largura, seu uso (e representação) é bem diferente. Você não pode armazenar 3,141 em um inteiro, mas você pode em um float .

Dissecando os dois um pouco mais:

Em um inteiro, todos os bits são usados ​​para armazenar o valor numérico. Isso é (em Java e muitos computadores também) feito no chamado complemento de dois . Isso basicamente significa que você pode representar os valores de −2 31 a 2 31 – 1.

Em um float, esses 32 bits são divididos entre três partes distintas: o bit de sinal, o expoente e a mantissa. Eles são dispostos da seguinte maneira:

 S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM 

Há um único bit que determina se o número é negativo ou não negativo (zero não é positivo nem negativo, mas tem o bit de sinal definido como zero). Então, há oito bits de um expoente e 23 bits de mantissa. Para obter um número útil a partir disso, (aproximadamente) o seguinte cálculo é executado:

M × 2 E

(Há mais, mas isso deve ser suficiente para o propósito desta discussão)

A mantissa é, em essência, não muito mais que um número inteiro de 24 bits. Isso é multiplicado por 2 pelo poder da parte do expoente, que, aproximadamente, é um número entre -128 e 127.

Portanto, você pode representar com precisão todos os números que caberiam em um inteiro de 24 bits, mas o intervalo numérico também é muito maior, pois maiores expoentes permitem valores maiores. Por exemplo, o valor máximo para um float é de cerca de 3,4 × 10 38, enquanto int apenas permite valores até 2,1 × 10 9 .

Mas isso também significa, já que 32 bits têm apenas 4,2 × 10 9 estados diferentes (que são usados ​​para representar os valores que int podem armazenar), que na extremidade maior do intervalo numérico do float os números são mais espaçados (já que não pode ser mais números float exclusivos do que números únicos int ). Você não pode representar alguns números exatamente, então. Por exemplo, o número 2 × 10 12 tem uma representação no float de 1.999.999.991.808. Isso pode ser perto de 2.000.000.000.000, mas não é exato. Da mesma forma, adicionar 1 a esse número não o altera porque 1 é muito pequeno para fazer diferença nas escalas maiores que o float está usando lá.

Da mesma forma, você também pode representar números muito pequenos (entre 0 e 1) em um float mas independentemente de os números serem muito grandes ou muito pequenos, float tem apenas uma precisão de cerca de 6 ou 7 dígitos decimais. Se você tem números grandes, esses dígitos estão no início do número (por exemplo, 4.51534 × 10 35 , que nada mais é do que 451534, por 30 zeros – e float não pode dizer nada útil sobre se esses 30 dígitos são realmente zeros ou outra coisa) , para números muito pequenos (por exemplo, 3,14159 × 10 −27 ), eles estão no extremo do número, muito além dos dígitos iniciais de 0,0000 …

Flutuadores são usados ​​para armazenar um intervalo maior de números que podem ser ajustados em um inteiro. Estes incluem números decimais e números de estilo de notação científica que podem ser valores maiores do que podem caber em 32 bits. Aqui está o mergulho profundo neles: http://en.wikipedia.org/wiki/Floating_point

Intereting Posts