2016-09-21 2 views
0

Je suis en train de coder cette équation en utilisant java:codage d'une équation mathématique

enter image description here

Je prends a, b et c de l'utilisateur. Ce est le code que j'ai jusqu'à présent:

import java.util.Scanner; 
class QaudraticFunction{ 
    public static void main(String []args){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a: "); 
     double a = input.nextDouble(); 

     System.out.println("Enter b: "); 
     double b = input.nextDouble(); 

     System.out.println("Enter c: "); 
     double c = input.nextDouble(); 

     double val1 = (Math.pow(b,2.0)) - (4.0*a*c); 
     double discriminant = Math.sqrt(val1); 
     double val2 = (-b)-(discriminant); 
     double r2 = val2/(2.0*a); 

     System.out.println("r2 = " + r2); 
    } 
} 

Je pense que mon problème est une erreur logique parce que le programme compile et fonctionne correctement. Quand j'entre les valeurs pour a, b et c. Je reçois r2 = NaN

+0

'Lorsque j'entre les valeurs pour a, b et c' Quelles valeurs entrez-vous? – copeg

+2

Votre code semble bien. Vous fournissez probablement des coefficients pour une parabole qui ne coupe pas l'axe des x. J'oublie la terminologie mathématique exacte, mais essayez d'autres nombres – Kon

+1

vous obtiendrez NaN quand vous faites quelque chose de pas autorisé comme diviser par 0 ou prendre la racine carrée d'un nombre négatif qui sont les deux possibilités basées sur votre formule. Tout se résume à l'utilisation de vos nombres –

Répondre

3

Deux raisons possibles pour lesquelles vous voyez un NaN. Le dénominateur est le . Cela n'est possible que si a est défini sur 0 ou 0.0. Je vais supposer que ce n'est pas le cas.

L'autre possibilité est que vous effectuez une racine carrée d'un nombre négatif, qui (en java) est un NaN. Voir Math.sqrt javadoc pour plus de détails.

Si l'argument est NaN ou inférieur à zéro, le résultat est NaN.

+0

Oh, je comprends maintenant. Donc ce que vous dites est que la valeur de 'b' devrait être plus élevée que 'a' et 'c' sinon la racine carrée sera négative. – Vishal

+1

Trier par. Je spécule ici puisque vous n'avez pas donné la valeur de a, b et c mais ce sera ma meilleure estimation. Si vous avez besoin de recommandations sur la façon d'y faire face, une méthode bon marché consistera simplement à vérifier si val1 est NaN ou b^2> 4 * a * c; sinon, lancez une erreur. L'autre consiste à utiliser le type de données [Complexe d'Apache commun] (https://commons.apache.org/proper/commons-math/userguide/complex.html). –