Как решить проблему 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.
Спасибо за совет
Ответы
Ответ 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));
}
}