progster Posted January 2, 2013 at 10:36 PM Report #489309 Posted January 2, 2013 at 10:36 PM Boa noite, Venho mais uma vez solicitar a vossa ajuda. É o seguinte, num programa para calcular a formula resolvente está a dar-me o output "NaN". Depois de uma pesquisa, sei agora que "NaN", quer dizer "Not a number". Até aqui tudo bem, continuei a pesquisar e salvo induzido em erro pela informação que encontrei, isto acontece porque o intervalo de valores da variável é limitado, ou então... (raizes negativas). Como é que eu posso "contornar" isto, ou seja, como é que posso colocar o programa a dar-me um valor especifico?. package fresolvente; public class FResolvente { public static void main(String[] args) { double a,b,c=0; double num1,num2,num3; System.out.print ("Introduza o valor de a"); a=Le.umDouble(); System.out.print ("Introduza o valor de b"); b=Le.umDouble(); System.out.print ("Introduza o valor de c"); c=Le.umDouble(); num1=Math.sqrt((b*b)-(4*a*c)); System.out.print("A raiz quadrda de (b*b)-(4*a*c) é:"+num1); num1=Le.umDouble(); num2=(-b-num1)/(2*a); num2=Le.umDouble(); num3=(-b+num1)/(2*a); num3=Le.umDouble(); System.out.print ("As raizes da equação são:"+num2+"e"+num3); } } P.s.: Durante a pesquisa, encontrei alguns comentários onde se fala em conversão para BigDecimal etc,etc,etc, mas como ainda estou no inicio venho pedir a vossa ajuda para tentar compreender esta situação. Agradeço desde já, qualquer ajuda que me possam dar. Cumprimentos. Não resolvo dúvidas por PM.
KTachyon Posted January 2, 2013 at 10:48 PM Report #489310 Posted January 2, 2013 at 10:48 PM (edited) Se b*b < 4*a*c, o que acontece? Ou se a == 0? 😉 (Bem, tecnicamente já te estou a dar a resolução para o teu problema) Edited January 2, 2013 at 10:50 PM by KTachyon “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
thoga31 Posted January 2, 2013 at 10:51 PM Report #489313 Posted January 2, 2013 at 10:51 PM (edited) Desde já eu não programo em Java. Contudo, posso apontar uns conselhos: tens de controlar o input e o output. Primeiro, se o factor A é não nulo, e depois se o discriminante é positivo ou nulo. Aqui estou a supor que le.umDouble() está bem implementado (situação que desconheço). Boa sorte 😉 Edited January 2, 2013 at 10:51 PM by thoga31 Knowledge is free!
progster Posted January 2, 2013 at 10:59 PM Author Report #489316 Posted January 2, 2013 at 10:59 PM Se b*b < 4*a*c, o que acontece? Ou se a == 0? 😉 (Bem, tecnicamente já te estou a dar a resolução para o teu problema) Bem..., nem era uma questão de programação. Já me dá um valor e não o "NaN". Desde já eu não programo em Java. Contudo, posso apontar uns conselhos: tens de controlar o input e o output. Primeiro, se o factor A é não nulo, e depois se o discriminante é positivo ou nulo. Aqui estou a supor que le.umDouble() está bem implementado (situação que desconheço). Boa sorte 😉 Tens razão. Devia ter testado para valores diferentes. Obrigado a ambos, pela ajuda e paciência 🙂 dispensadas. Peço desculpa pelas "barbaridades" que no futuro for aqui colocando, mas se não for assim..., não aprendo. Não resolvo dúvidas por PM.
thoga31 Posted January 2, 2013 at 11:01 PM Report #489318 Posted January 2, 2013 at 11:01 PM Não são barbaridades. São consequências saudáveis de um processo de aprendizagem 😉 Dispõe sempre que precisares. Boa sorte. Knowledge is free!
progster Posted January 2, 2013 at 11:02 PM Author Report #489319 Posted January 2, 2013 at 11:02 PM Muito obrigado. 👍 Não resolvo dúvidas por PM.
KTachyon Posted January 2, 2013 at 11:18 PM Report #489322 Posted January 2, 2013 at 11:18 PM (edited) Só mais um à parte. A formula resolvente foi feita para equações de segundo grau. Se a for zero, sabes logo à partida que não se trata de uma equação de segundo grau. Ou seja, podes filtrar imediatamente o input do utilizador e dizer-lhe que a equação não é de segundo grau, mal ele preencha o valor de a. Para os restantes casos são sempre equações de segundo grau, mas algumas não têm solução Real. Mas podes tentar resolver o problema devolvendo uma solução Complexa. Não é assim tão difícil quanto isso: Se b*b < 4*a*c fazes os cálculos para X = -b / 2*a Y = sqrt(4*a*c - b*b) / 2*a e apresentas como solução X ± Yi. Edited January 2, 2013 at 11:18 PM by KTachyon “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
progster Posted January 2, 2013 at 11:27 PM Author Report #489324 Posted January 2, 2013 at 11:27 PM E em vez do "NaN", já me dá um valor certo? Podes explicar o que queres dizer com: "X ± Yi" ? Não resolvo dúvidas por PM.
thoga31 Posted January 2, 2013 at 11:40 PM Report #489328 Posted January 2, 2013 at 11:40 PM Podes explicar o que queres dizer com: "X ± Yi" ? Isto é matemática. Procura por números complexos ou imaginários. A base do conjunto imaginário é que i2 = -1. Como deves reparar, isto não é possível no conjunto real: não há nenhum número real que elevado ao quadrado dê um número negativo. i é, então, a base das bases dos números imaginários. Pesquisa 😉 Knowledge is free!
progster Posted January 3, 2013 at 12:00 AM Author Report #489330 Posted January 3, 2013 at 12:00 AM Ok. É isso mesmo que vou fazer. 🙂 Não resolvo dúvidas por PM.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now