Подтвердить что ты не робот

Как решить проблему cos 90 в java?

У меня есть некоторые проблемы с вычислением cosinus 90 в Java с использованием функции 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));

      }

}

Когда я вычисляю cos90 или cos270, он дает мне абсолютное значение. Это должно быть 0. Я тестировал с 91 или 271, дает почти 0, что является правильным.

что делать, чтобы сделать вывод cos 90 = 0? поэтому он делает выход x = 0 и y = 4.

Спасибо за совет

4b9b3361

Ответ 1

То, что вы получаете, скорее всего, очень, очень маленькие цифры, которые отображаются в экспоненциальной нотации. Причина, по которой вы их получаете, заключается в том, что pi/2 не является точно представимым в нотации IEEE 754, поэтому нет способа получить точный косинус 90/270 градусов.

Ответ 2

Просто запустите свой источник, и он вернется:

cos 90 : 1.8369701987210297E-16
sin 90 : 4.0

Это абсолютно правильно. Первое значение равно 0. Второе - 4, как ожидалось.

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

Здесь вы должны прочитать документацию Math.toRadians(), в которой говорится:

Преобразует угол, измеренный в градусах, к приблизительно эквивалентному углу, измеренному в радианах. Преобразование из градусов в радианы обычно неточно.

Обновление: Вы можете использовать, например, метод MathUtils.round() из репозитория Apache Commons и round выход, чтобы сказать 8 десятичных знаков, например:

System.out.println("cos 90 : " + MathUtils.round(x, 8));

Это даст вам:

cos 90 : 0.0
sin 90 : 4.0

Ответ 3

Попробуйте следующее:

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));
    }
}