Casa > P > Por Que 0,1+0,2 Não É Igual A 0,3 Na Maioria Das Linguagens De Programação?

Por que 0,1+0,2 não é igual a 0,3 na maioria das linguagens de programação?

na maioria dos computadores é verdadeiro se você usar == como comparação

para entender porque você precisa entender como números de ponto flutuante são armazenados em um computador.

o principal problema sobre porque neste caso em particular é porque 0.1 e 0.3 não estão dentro do mesmo expoente base dentro de um float.

, então por causa de tal 0.3 tem menos acuracidade que 0.1 e 0.2, e quando você adiciona 0.1 e 0.2 há alguma truncagem .

primeiro.

0.1 em um computador não é realmente 0.1 é realmente 0.100000001490116119384765625

(é o mais próximo do computador que pode obter mas não é exactamente 0.1)

0.2 num computador não é realmente 0.2 é ao invés disso 0.2.20000000298023223876953125

  1. 0.100000001490116119384765625 
  2. +0.20000000298023223876953125 
  3. ------------------------------- 
  4. 0.30000000447034835815429687  
  5. but a computer cannot store this number either so it stores  
  6. 0.2999999821186065673828125 
  7. (and yes because 0.1 and 0.2 are in different bases it does lost a few values) 

now 0.3 is also not 0.3 but: 0,300000011920928955078125

e claramente 0,300000011920928955078125 não é igual a 0,299999999821186065673828125

está muito próximo mas não é igual a 0,299999999821186065673828125

está muito próximo mas não é igual a 0,2999999998211860653828125

> está muito próximo mas não é igual a 0,29999999999811860653828125

adicionando pontos flutuantes a menos que casos específicos (na maioria dos casos potências de 2 ou números que podem ser divididos por dois após menos de 24 vezes), não podem ser representados como pontos flutuantes exactamente e darão sempre erros.

e ao fazer isto um computador você precisa saber qual é a sua margem de erro

(em floats é mais ou menos o mesmo número dividido por um 10^6) para estar sempre seguro e é relativo ao número que você está olhando.

em outras palavras, se você adicionar 1 + 10^6 o erro será terrível de fato tanto que adicionar 1 a 10 ^8 lhe dará 10^8 sem nenhuma mudança.

De Reamonn Vaquez

Quais são alguns exemplos de produtos com excesso de engenharia? :: Um ciborgue ainda é considerado humano?