Erro na calculadora
#1
Mensagem publicada 26 April 2010 - 19:15
#2
Mensagem publicada 26 April 2010 - 20:08
Esse valor é derivado do calculo efectuado pelo processador. Tem tudo a ver com a precisão do calculo. O CPU não sabe o que não numeros decimais, só inteiros. Portanto existem várias técnicas para representar numeros decimais no processador. A mais usada é usando "pontos de precisão". O tipo float tem um ponto de precisão, o double, tem 2. Quanto mais pontos tiver, mais exacto é o valor calculado. (é claro que acrescenta uma maior representação dos dados)Posto isto, o valor nao está errado, no limite até está correto. Simplesmente aprensenta uma precisão pela qual nao esperavasViva,Hoje deparei-me com um Bug na calculadora de origem do Desire. Ao fazer 0.95-0.9 o resultado que me dá é 0.049999999 quando devia ser 0.05, como é obvio... Acontece isto a mais alguém?Estou agora a sacar a RealCalc que o PJFonseca aconselha no vídeo das várias aplicações úteis para ver se acontece o mesmo.. ;)CumpsEdit: Com a RealCalc já não acontece.. lol Bug estranho...
#3
Mensagem publicada 26 April 2010 - 21:03
#4
Mensagem publicada 26 April 2010 - 21:09
é correcto é. e o problema que encontraste pode simplesmente ser a diferença entre usar o tipo "float" ou o tipo "double"e agora pensa nos seguinte:0.49999999999999999999999999999999999999999999999999999999no limite não é o mesmo que 0.5? é tudo uma questão de precisão. e se vires bem as coisas, o 1º até pode estar mais preciso que o segundo (mas isto só em casos especificos). No teu caso, claramente é erro de precisão, portanto o tipo de variável que foi usada para efectuar os calculos foi o errado.Acredito em algumas coisas q disseste e sei que os cálculos sao feitos pelo processador, mas a verdade é que o valor apresentado não é o correcto em nenhuma parte do mundo. Estou a passar valores exactos e não valores aproximado, não há necessidade de fazer arredondamentos sequer... é no mínimo estranho e caricato, e mais ainda quando a outra calculadora devolve o valor correcto... ;)Cumps
#5
Mensagem publicada 27 April 2010 - 09:34
#6
Mensagem publicada 27 April 2010 - 09:36
#7
Mensagem publicada 28 April 2010 - 19:48
#8
Mensagem publicada 28 April 2010 - 20:10
Quanto queres aqui perder?!r3pek...podes falar em precisão... mas por muita precisão que tenhas, uma subtracção nunca ganha mais casas decimais do que que o valor com maior número de casa que lhe deu origem, isto é, se o valor com maior precisão vai até à terceira casa, o resultado NUNCA ultrapassa isso.o que estás a falar aplica-se a a divisões e afins, mas nunca a aritmética simples
#9
Mensagem publicada 28 April 2010 - 20:44
#10
Mensagem publicada 28 April 2010 - 22:32
É apenas um problema de representação por falta de precisao. aredonda o numero a 2 casas decimais e consegues ver que está certo.erros de precisão levam a arredondamentos e não a "desambiguações"neste caso não se trata de qualquer problema de precisão, pois aquele valor está claramente errado
#11
Mensagem publicada 29 April 2010 - 08:19
#12
Mensagem publicada 29 April 2010 - 08:27
Mais giro ainda, é quando começas a usar várias versões do mesmo compilador e com umas versões não dá problema, e com outras dá :PVirgula flutuantes é lixadoestive a rever os calculos de virgula flutuante, e realmente no calculo de A-B onde B é maior que A, é efectuada uma multiplicação e um exponencial... e assim sendo já podem existir erros de precisão!!! (tenho de dar razao ao r3pek)curioso é que se o operando for inferior a .8, não dá problemas
#13
Mensagem publicada 29 April 2010 - 12:30
#14
Mensagem publicada 29 April 2010 - 13:27
Mas não sabes como é que o compilador reordenou, ou se reordenou, o código. Como disse, isto é um problema variante, mas que acontece devido ao que disse.Mas no caso que eu dei, no cálculo A-B, B é menor que A... ;)Cumps