Как найти арккосинус в градусах java

Я пытаюсь создать всеобъемлющий калькулятор, но у меня возникает проблема. Пока я пытаюсь найти недостающий угол с помощью закона косинусов, я не получаю того же ответа, что и мой калькулятор.

double answer = 0;
else if (solver == 2 && choice == 2)
    {
        System.out.println("Enter side length opposite of wanted angle: ");
        double c = in.nextDouble();
        System.out.println("Enter known side #2: ");
        double b = in.nextDouble();
        System.out.println("Enter known side #3: ");
        double a = in.nextDouble();

        answer = (Math.pow(c, 2) - Math.pow(b,2) - Math.pow(a,2)) /  (-2 *         (a * b));
        answer = Math.acos(answer);
        System.out.println("Answer: " + answer);
    }

Без «answer = Math.acos (answer);» я получаю правильный ответ, необходимый перед последним шагом, но тогда мне понадобится арккосинус этого ответа. Я не понимаю правильного ответа. Кто-нибудь понимает почему?

Какой тип переменной answer? также какого вы ожидаете ответа, в градусах или радианах?

Alex 27.03.2018 23:13

двойной. И, как говорится в вопросе, в градусах.

Michael K. 27.03.2018 23:15

По мере того, как знаменатель становится большим, ваши вычисления будут стремиться к нулю, потому что ваш тип данных имеет только такое количество бит, которое он может использовать, чтобы A. представлять себя, а B. выполнять вычисления в двоичном формате.

Roddy of the Frozen Peas 27.03.2018 23:16

Ах, я пропустил подпись. Мои извинения. Math.acos() ожидает радианы и возвращает радианы. загляните в Math.toDegrees () и Math.toRadians ()

Alex 27.03.2018 23:19

Я также попробовал Math.toDegrees () и получил NaN, toRadians дает неправильный ответ.

Michael K. 27.03.2018 23:21

Вопросы, требующие помощи по отладке («почему этот код не работает?»), Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе. Вопросы без четкой постановки проблемы не будут полезны другим читателям. См .: Как создать минимальный воспроизводимый пример. Используйте ссылку редактировать, чтобы улучшить свой вопрос - не добавляйте дополнительную информацию через комментарии. Спасибо!

GhostCat 27.03.2018 23:31

Не редактируйте вопрос и не меняйте код решения. У вас есть ответ ниже с решением. Щелкните галочку рядом с ним, чтобы принять это решение. Возврат вопроса к удалению решения.

Andreas 27.03.2018 23:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
7
366
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это дает мне правильный результат, обратите внимание на добавление Math.toDegrees ():

        double answer = (Math.pow(c, 2) - Math.pow(b,2) - Math.pow(a,2)) / (-2 * (a * b));
        answer = Math.acos(answer);
        System.out.println("Answer: " + Math.toDegrees(answer));

Спасибо, разобрался. Я почему-то был в тупике около 2 часов. Я пытался включить Math.toDegrees в acos. Т.е. Math.acos (Math.toDegrees (ответ));

Michael K. 27.03.2018 23:30

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