0

二次方程式または三次方程式を解くプログラムを書いています。Math.toRadians問題は、正しく配置しているかどうかわからないということです。

コードは次のとおりです。

public double[] getRaices(double a,double b, double c, double d) throws ComplexException {
    if (a==0){
        double discriminante=Math.pow(c,2)+((-4)*b*d);
        if(discriminante>=0){
            this.Raices[0]=(c*(-1)+Math.sqrt(discriminante))/(2*b);
            this.Raices[1]=(c*(-1)-Math.sqrt(discriminante))/(2*b);
        }else{
            throw new ComplexException("No hay solucion Real");
        }

    } else{
        double f=((3*c/a)-(Math.pow(b,2)/Math.pow(a,2)))/3;
        double g=((2*Math.pow(b,3)/Math.pow(a,3))-(9*b*c/Math.pow(a,2))+(27*d/a))/27;
        double h=(Math.pow(g,2)/4)+(Math.pow(f,3)/27);
        if(f+g+h==0){
            Raices [0]=Math.cbrt(d/a)*(-1);
            Raices [1]=Math.cbrt(d/a)*(-1);
            Raices [2]=Math.cbrt(d/a)*(-1);
        }else{
            if(h<=0){
                double i=Math.sqrt((Math.pow(g,2)/4)-h);
                double j=Math.cbrt(i);
                double k=Math.acos(Math.toRadians(-1*(g/2*i)));
                System.out.println(" "+k+" ");
                double l=j*(0-1);
                double m=Math.toRadians(Math.cos(Math.toRadians(k/3)));
                System.out.println(" "+m+" ");
                double n=Math.sqrt(3)*Math.sin(Math.toRadians(k/3));
                System.out.println(" "+n+" ");
                double p=(b/(3*a)*(0-1));
                Raices [0]=2*j*Math.cos(Math.toRadians(k/3))-(b/(3*a));
                Raices [1]=(l*(m+n))+p;
                Raices [2]=(l*(m-n))+p;
            }else{
                double r=((0-1)*(g/2))+Math.sqrt(h);
                double s=Math.cbrt(r);
                double t=((0-1)*(g/2))-Math.sqrt(h);
                double u=Math.cbrt(t);
                throw new ComplexException("2 de las raices son imaginarias pero una raiz es real: "+Math.floor(Raices [0]=(s+u)-(b/(3*a))));
            }
        }
    }
    return Raices;
}

しかし、問題はif (h<=0).

4

1 に答える 1