Só complementando: em algumas faculdades isso se estuda na disciplina de cálculo numérico (mas integral e diferencial são pre-requisitos, assim como álgebra linear). Não deve ser de muito "fácil acesso" para quem não tem base matemática (confesso que para mim não foi tão fácil assim), mas dá para entender muita coisa se alguém se dispuser a ler um pouco.
Lá você vai estudar: Erro nas aproximações numéricas, Resolução numérica de equações diferenciais de grau superior, equações de diferenças finitas, diferenciação e integração numérica, técnicas de otimização, métodos matemáticos. (este último já faz parte de outra disciplina mas você vê uma pequena introdução em CN). Pra quem se interessar, uma lista de livros sobre o assunto: -Barroso, Cálculo Numérico, Ed. Harba (eu estudei por este). -Ruggiero, C.Numérico, Makron (Não gostei muito). -Martins, Cálculo Numérico Computacional, Atlas -Lindfield, Metodos Num. usando Matlab, Ellis Horwood -Teukolsky, Receitas Numéricas usando C-W.Press -Humes-Noções de cálculo numérico (bom p/iniciantes). -Barros, Introd. ao CN, Blucher. (muito bom p/iniciantes). E para os amigos programadores: 2 + 2 tem que ser igual a 4 sim, pelo menos nos nossos sistemas, que o processador faça de outra forma tudo bem, mas o resultado tem que ser esse. E quando você comparar uma variável que tenha 2 com outra que tenha 2, o resultado tem que ser true. Nas novas linguagens, estos problemas estão minimizados, com funções específicas. Mas tudo bem, cada cabeça é um mundo-é assim que nascem as nova idéias. williams *------------------------------------------- Williams Díaz [EMAIL PROTECTED] http://www.interban.com.br ----- Original Message ----- From: "Delphi" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, November 17, 2004 2:20 PM Subject: Re: [delphi-br] Re: Cálculo Caros colegas, esta última conclusão do Walter esclarece o assunto, o que pode parecer um "problema" para nós, não significa um bug do sistema e muito menos da liguagem de programação. O fato é que 8.11-8.11 não é igual à Zero, como 2+2 não é exatamente 4. Pode ser de difícil compreensão ou assimilação para programadores que não estudam a área de exatas. Para quem se interesse pelo assunto, a disciplina que trata do mesmo chama-se Cálculo Diferencial e Integral, e de fácil acesso. O interressante nesta discussão é o fato do que parece de difícil compreensão para alguns hoje, mesmo aceitando, e sem querer saber o "por quê? " existe hoje a telefonia celular, e nem precisaríamos voltar tanto no tempo, qualquer um de nós que falasse em aparelhos de telefone sem fio e com câmera fotográfica digital há 50 anos atrás, seria considerado louco. Voltando à informática, grandes empresas hoje, tem seu cabeamento todo feito por cabos de fibra óptica. Em qualquer livro de Física de 2º grau, encontramos que a luz é uma onda composta pelas sete cores do arco-íris, que somandas formam a "luz branca" que conhecemos, e ainda que quando nós olhamos um tecido azul, a composição do pigmento do tecido absorve a "onda azul" e reflete as outras, ai a sensação da cor azul, já a cor preta absorve todas e a branca reflete todas, por isso também ao saírmos no sol, uma camiseta preta aquece muito mais do que uma branca, e por ai vai... Para que estuda programação ou tem curiosidade procure por métodos numérios, dentre eles, "o método de Newton-Raphson" e compreenderá o significado do resultado "problemático" apresentado, e entenderá neste pequeno exemplo a grandiosidade da matemática. É importante ressaltar o que o Walter disse " o erro, quem faz, somos nós", o que hoje mesmo nos comunicando como estamos agora, via internet, com pessoas que nunca sequer imaginariámos existir, parece problema, já não o era por volta de 1684, quando Newton e Leibniz "descobriram" ou mais certo "decodificaram" o cálculo diferencial integral presente na natureza, que faz com que um floco de neve visto ao microscópio apresente uma estrura geométrica perfeita, ou ainda que uma abelha construa uma colmeia com casulos hexagonais de arestas exatamente iguais, o cálculo, senhores é uma maravilha oculta na natureza, e pelo seu estudo, o homem se difere dos outros, isso nos faz "homens", a vontade de "descobrir" o por quê das coisas, e não aceitar em somente fazer uma comeia com lados de comprimento identicos ! Sugestão pessoal: que não viu, assitam o filme " Uma mente brilhante " abraços Fabio Torres Takeuchi Engenheiro Químico ----- Original Message ----- From: Walter Alves Chagas Junior To: '[EMAIL PROTECTED]' Sent: Wednesday, November 17, 2004 3:30 PM Subject: RES: [delphi-br] Re: Cálculo Williams Isto não é erro e nem Bug. É um problema, realmente, pois o Ponto flutuante é assim e fica complicado usá-lo em aplicações comerciais que exigem fechamento de valores exatos (O Ponto flutuante nunca é exato, ele é infinito). Ele é um problema pra nós, mas nunca um erro. O erro, quem faz, somos nós :) []s Walter Alves Chagas Junior Projeto e desenvolvimento Telemont Engenharia de telecomunicações [EMAIL PROTECTED] Fone: (31) 3389-8215 Fax: (31) 3389-8200 > -----Mensagem original----- > De: Williams Diaz [mailto:[EMAIL PROTECTED] > Enviada em: quarta-feira, 17 de novembro de 2004 13:18 > Para: [EMAIL PROTECTED] > Assunto: Re: [delphi-br] Re: Cálculo > > > > Pode sim, inclusive é um erro documentado da borland com relação aos > processadores (não dá em todos). O problema é quando você > compara um com > outro (if umo = outro então.... ) eles nunca são iguais, > mesmo que sejam. > Fiz uma opção de arredonda para isso, ou seja para retirada > das sujeiras. A > borlando recomenda que ao comparar dois números float > subtraia os dois e > compare o resultado, se ele for muito, muito pequeno, então > são "iguais". > > Abaixo o que a borland fala sobre isso. > > Problems comparing floating point numbers. - by Inprise > Developer Support > Staff > Abstract:Floating point numbers cannot be accurately compared for > equality. > > Because of the way floating point numbers are represented by > the computer > there can be inconsistencies when comparing two numbers that > appear to be > identical. Unlike integers, IEEE floating point numbers are only > approximates, not exact numbers. The need to convert the numbers to a > form the computer can store in binary leads to minor precision or > round-off deviations. For example 1.3 may really be represented as > 1.29999999999. > > There may particularly be problems when using conversion > functions such as > StrToFloat, TextToFloat and StrToCurr. Therefore you should > never use = or > <> to compare two floating point numbers. Instead, subtract > the two numbers > and compare them against a very small number. > > Example: > procedure TForm1.Button1Click(Sender: TObject); > var > f1, f2 : double; > begin > f1 := 1.3000000; > f2 := 1.2999999; > if abs(f1-f2) < 0.00001 > then ShowMessage('f1 and f2 are equal') > else ShowMessage('f1 and f2 are not equal'); > end; > > Add or View comments on this article > Products: > Borland Delphi 5.x > Platforms: > Windows 95 1.00B; Windows 98 1.0; Windows NT 4.0 > Article ID: 22507 Publish Date: July 21, 2000 Last Modified: October > 02, 2000 > > > *------------------------------------------- > Williams Díaz > [EMAIL PROTECTED] > http://www.interban.com.br > > ----- Original Message ----- > From: "dom_rr2004" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Wednesday, November 17, 2004 12:59 PM > Subject: [delphi-br] Re: Cálculo > > > > > Boa tarde! Desculpem a intromissão mas achei a questão curiosa. Como > pode 8,100 - 8,100 = 0,000000000000000035561831257245 ? > > > Antecipadamente agradeço > > --- Em [EMAIL PROTECTED], "Delphi" <[EMAIL PROTECTED]> > escreveu > > Na verdade, quanto a matemática isto é apenas um interpretação > errada de aproximação decimal. A sobra está sendo apresentada em > simbologia científica (potência de base dez) ou seja, (- > 3,5561831257245E-16) representa matematimamente - > 0,000000000000000035561831257245, o que notóriamente é admitido como > sendo Zero. Sendo assim podemos considerar a "distância" entre 0 e 1, > ou como 0 e -1, como sendo infinita, ou seja, não como se determinar > quantas divisões podem haver no intervalo -1> = 0< =1. O que acontece > no cotidiano é a aproximação do resultado numérico através do Cálculo > Diferencial e Integral, para que possamos ter a sensação de > quantidade, ou seja, 0,1,2,3.... > > > > Qto ao programa, o resultado apresentado está correto, vc deve > apenas "arredondar" o resultado a ser exibido. > > > > Fabio Torres Takeuchi > > Engenheiro Químico > > ----- Original Message ----- > > From: Depto de Informatica > > To: [EMAIL PROTECTED] > > Sent: Wednesday, November 17, 2004 1:31 PM > > Subject: [delphi-br] Cálculo > > > > > > Caros colegas, > > > > Utilizo o Delphi 5, Access e ADO. O que está acontecendo é o > seguinte: Tenho um campo do tipo DECIMAL em uma determinada tabela > que contém o saldo do produto. Quando eu dou a saída de uma > determinada quantidade deste produto o sistema deverá testar se o > saldo não fica negativo. Neste campo eu tenho um saldo de 8,100 mas > quando vou dar saída destes 8,100 (devería ficar com zero de saldo) > ele me diz que o saldo ficará negativo e o valor que o sistema > apresenta como sendo o saldo restante é -3,55618312575245E-16. > > > > Ou seja o sistema está me mostrando que: 8,100 - 8,100 = - > 3,55618312575245E-16 > > > > Como resolver isso ? > > > > Obrigado > > > > Luiz Carlos > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > -- > > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > > > Para ver as mensagens antigas, acesse: > > http://br.groups.yahoo.com/group/delphi-br/messages > > > > Para falar com o moderador, envie um e-mail para: > > [EMAIL PROTECTED] ou [EMAIL PROTECTED] > > > > > > > > Yahoo! Grupos, um serviço oferecido por: > > > > São Paulo Rio de Janeiro Curitiba Porto Alegre > Belo Horizonte Brasília > > > > > > > > > > -------------------------------------------------------------------- > ---------- > > Links do Yahoo! Grupos > > > > a.. Para visitar o site do seu grupo na web, acesse: > > http://br.groups.yahoo.com/group/delphi-br/ > > > > b.. Para sair deste grupo, envie um e-mail para: > > [EMAIL PROTECTED] > > > > c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos > do Serviço do Yahoo!. > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > Para ver as mensagens antigas, acesse: > http://br.groups.yahoo.com/group/delphi-br/messages > > Para falar com o moderador, envie um e-mail para: > [EMAIL PROTECTED] ou [EMAIL PROTECTED] > > Links do Yahoo! Grupos > > > > > > > > > > > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > Para ver as mensagens antigas, acesse: > http://br.groups.yahoo.com/group/delphi-br/messages > > Para falar com o moderador, envie um e-mail para: > [EMAIL PROTECTED] ou [EMAIL PROTECTED] > > Links do Yahoo! Grupos > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: ------------------------------------------------------------------------------ Links do Yahoo! Grupos a.. Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ b.. Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!. [As partes desta mensagem que não continham texto foram removidas] -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html