В 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); 

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

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

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

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

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

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

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

    Intereting Posts
    JavaPoet + Android Studio "addModifiers (модификатор) нельзя применить к модификатору" Инициализация проигрывателя YouTube в фрагменте Значения китайских локалей-zh_CN дают ошибку на Eclipse Перехват входящего вызова Android, переадресация вызова Ссылка на значения из массива в java Получение «Called doStart, когда он уже запущен» из LoaderManager. Зачем? Ошибка загрузки APK для версии Alpha. Ошибки от apksigner: алгоритм дайджеста и алгоритм подписи, который не поддерживается на уровнях API ] Как отправить данные в текущую активность из широковещательного приемника, Как установить adobe air в эмулятор android Как изменить цвет выбранного списка в ящике навигации? IllegalStateException: контент был использован Как читать и записывать данные в COM / Serial порты в Android? SQLiteException: не удается запустить транзакцию в транзакции (код 1) Проверьте, может ли телефон отправлять SMS-сообщения В чем основные отличия между виртуальной базой данных и стеком?