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

В C, tan (30) дает мне отрицательное значение! Зачем?

Я заметил, что моя функция tan(float) из библиотеки cmath возвращает отрицательное значение.

Следующий фрагмент кода при запуске:

    #include <cmath>
    ....

    // some calculation here gives me a value between 0.0 to 1.0.
    float tempSpeed = 0.5; 

    float tanValue = tan(tempSpeed * 60);

    __android_log_print(ANDROID_LOG_INFO, "Log Me", "speed: %f", tanValue);

Дает мне этот результат в моем файле журнала:

    Log Me: speed `-6.4053311966`

Насколько я помню

    tan(0.5*60) = tan(30) = 1/squareroot(3);

Может ли кто-нибудь помочь мне здесь, как в том, почему я вижу отрицательную ценность? Связано ли это с некоторой ошибкой размера с плавающей запятой? Или я делаю что-то действительно немое?

4b9b3361

Ответ 1

В C, tan и других тригонометрических функциях ожидают радианы как их аргументы, а не градусы. Вы можете преобразовать градусы в радианы:

tan( 30. * M_PI / 180. ) == 0.57735026918962576450914878050196

Ответ 2

Что касается касания вашего угла (30 радиан.), если вы ищете касательную 30 градусов, вы должны сначала преобразовать свой угол в радианы.

Ответ 3

Я думаю, что в C функция tan требует, чтобы вы вводили Radians в качестве аргумента, а не значение фактической степени.

поэтому для Tan 30 вам нужно будет преобразовать 30 градусов в радиан. Имейте в виду, что 360 градусов - это 2 * Pi радиан, поэтому 30 дегрессий будут (1\6 * Pi) th радиана.

поэтому tan (1\6 * Pi) даст вам правильный ответ. где Pi равно 3,142