Что-то не так с функцией asin()

У меня есть эти две строки кода:

var[1] =var[2].multiply(var[3]).multiply(var[4]).multiply(new BigDecimal(Math.sin(var[5].doubleValue())));
    var[5] =new BigDecimal(Math.asin(var[1].divide(var[2],precision,BigDecimal.ROUND_HALF_UP).divide(var[3],precision,BigDecimal.ROUND_HALF_UP).divide(var[4],precision,BigDecimal.ROUND_HALF_UP).doubleValue()));

Я даю значения для var[2],var[3],var[4] и var[5], чтобы получить var [1].

Уравнение используется

var[1]=var[2]*var[3]*var[4]*sin(var[5])

Затем я пытаюсь получить var[5], используя var [1], который я только что получил, и те же значения других переменных, это дает мне неправильное число, и я не могу понять, почему

3 ответа

Решение

перезапись

Я убираю некоторые арифметические паутины, но:

Math.asin(Math.sin(1)) == ~1
Math.asin(Math.sin(3.14 / 2)) == ~3.14 / 2  // 1.57
Math.asin(Math.sin(3.14)) == ~0

Как сказано в документации, результаты для Math.asin() связаны между -Pi/2 и Pi/2...

Таким образом, ваш ответ кажется "неправильным", так как он находится внутри этого диапазона.

чередовать

Наиболее asin () вернет это: Pi/2 = 1,57

А 2 > 1,57 так:

2 - 1,57 = 0,43

1,57 - 0,43 = 1,14

следовательно: 2 = 1,14

Вы уверены, что ваши числа в радианах, а не в градусах?

Попробуйте преобразовать в радианы: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html)

Я думаю, что ваша проблема в том, что

var[5] = asin(var[1]/var[2]/var[3]/var[4])

скорее, чем

var [5] = asin (var [1] делится на (var[2]*var[3]*var[4]))

Надеюсь, я правильно понял ваш код.

Другие вопросы по тегам