Что-то не так с функцией 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]))
Надеюсь, я правильно понял ваш код.