12
votes

Comment résoudre COS 90 problème en Java?

J'ai quelques problèmes de calcul du cosinus 90 en Java en utilisant la fonction MATH.COS:

public class calc{
      private double x;
      private double y;

      public calc(double x,double y){
                   this.x=x;
                   this.y=y;
      }

      public void print(double theta){
           x = x*Math.cos(theta);
           y = y*Math.sin(theta);
           System.out.println("cos 90 : "+x);
           System.out.println("sin 90 : "+y);
      }

      public static void main(String[]args){
           calc p = new calc(3,4);
           p.print(Math.toRadians(90));

      }


7 commentaires

Quelles sont les valeurs absurdes que vous obtenez?


hai phooji, les valeurs absurdes est 6.123233995736766e-17


Ce n'est pas absurde, c'est juste absurdement petit.


@ Ignacio Vazquez-Abrams: Alors, que dois-je faire pour faire la sortie de COS 90 = 0?


David, le nombre est très proche de zéro; Pour des cas pratiques, c'est zéro; Vous ne pouvez pas avoir 90 ans dans les radians pour que ce soit exactement 0. Il n'y a aucun moyen de représenter PI / 2 en 64 bits et d'attendre des résultats parfaits.


Vous pouvez utiliser des entiers au lieu de doubles. Multipliez à 10 ^ x, effectuez des calculs, convertir. x définit la précision. Il n'y a pas d'autre moyen de faire COS90 = 0.


@Tall: oke gars, je pense que je l'ai eu. Merci beaucoup pour votre aide. :)


3 Réponses :


10
votes

Ce que vous obtenez est probablement très, très petit nombre, qui sont affichés dans la notation exponentielle. La raison pour laquelle vous les obtenez est que PI / 2 n'est pas exactement représentable dans la notation IEEE 754, il n'ya donc aucun moyen d'obtenir le cosinus exact de 90/270 degrés.


0 commentaires

5
votes

Il suffit d'exécuter votre source et de retourner: xxx

absolument correct. La première valeur est presque 0. La seconde est 4 comme prévu.

3 * cos (90 °) = 3 * 0 = 0

Ici vous doivent lire le Math .Ttoradiens () documentation qui dit:

convertit un angle mesuré en degrés en un angle approximativement équivalent mesuré dans les radians. La conversion des degrés en radians est généralement inexacte.

mise à jour: Vous pouvez utiliser par exemple le Mathutils.Round () Méthode du référentiel Apache Commons et autour de la sortie pour dire 8 décimales, comme ceci: xxx

qui vous donnera: xxx


2 commentaires

Mais comment puis-je obtenir la sortie COS 90 en nombres décimaux?


Ok micsim. Merci pour la solution. :)



0
votes

Essayez ceci:

public class calc
{
    private double x;
    private double y;
    public calc(double x,double y)
    {
        this.x=x;
        this.y=y;
    }
    public void print(double theta)
    {
        if( ((Math.toDegrees(theta) / 90) % 2) == 1)
        {
            x = x*0;
            y = y*Math.sin(theta);
        }
        else if( ((Math.toDegrees(theta) / 90) % 2) == 0)
        {
            x = x*Math.cos(theta);
            y = y*0; 
        }
        else
        {
           x = x*Math.cos(theta);
           y = y*Math.sin(theta); 
        }
        System.out.println("cos 90 : "+x);
        System.out.println("sin 90 : "+y);
    }
    public static void main(String[]args)
    {
        calc p = new calc(3,4);
        p.print(Math.toRadians(90));
    }
}


0 commentaires