Não ficou claro pra mim se os erros citados na aula acontecem somente em números pequenos ou em quaisquer outros números armazenados desta forma.
Não ficou claro pra mim se os erros citados na aula acontecem somente em números pequenos ou em quaisquer outros números armazenados desta forma.
Uma outra dúvida é se os erros de arrendodamento se dão pelo tamanho fixo de bytes por número ou pela base usada para representar os números em notação científica (base 2 e não base 10).
Olá Régis! Tudo bem?
Esse tipo de erro ocorre principalmente por conta do 0.1
e do 0.2
que utilizamos no exemplo do professor.
Como ele nos explica, esses dois números são particularmente complicados de serem expressos quando usamos a base 2.
Mas quando fazemos essa mesma operação, mas utilizamos números maiores, como você sugeriu... realmente o resultado tem alterações:
1000000.1 + 2000000.2
Resultado:
3000000.3
0.1 + 0.2
Resultado:
0.30000000000000004
Repare que quando utilizamos números maiores, as casas decimais são arredondadas automaticamente... por conta do tamanho do tipo ponto flutuante
.
Quanto ao motivo desse erro no arredondamento, é realmente por conta da base 2, que nos retorna uma sequencia de erros por não conseguir expressar com precisão alguns números decimais.
Então vemos que é na verdade um conjunto de fatores... Tanto existe a questão do tamanho fixo de bytes não nos ajudar em números muito maiores, quanto também temos a questão do ponto flutuante utilizar a base 2 e com isso perder a precisão ao representar números decimais.
É interessante entender os motivos disso acontecer, mas não precisa se preocupar tanto com a ocorrência desses erros, pois as linguagens de programação têm meios de evitar esse problema.
Um exemplo que temos é como a linguagem Java lida com a precisão em números de ponto flutuante. Para isso nós temos um tipo não primitivo chamado BigDecimal que nos possibilita fazer cálculos com números de ponto flutuante com base 10, eliminando esse erro que observamos no uso da base 2.
Outras linguagens tem suas próprias formas de solucionar esse problema, geralmente utilizando um tipo de dado que aceita números de ponto flutuante e que tem base 10.
Vou deixar aqui o link de um artigo nosso falando a respeito de números decimais com Python:
Precisão em números decimais com Python
Consegui te ajudar com essa resposta?
Se eu puer te ajudar em algo mais, é só falar!
Obrigado, Guilherme.
Entendi que era uma questão mais demonstrativa do que um erro a se preocupar no dia a dia, mas fiquei curioso. Sua resposta foi muito clara!