2016-07-31 2 views
-1

Когда я пишу на мой калькулятор Cos45 я десятичное число = 0,707Получение десятичное значение Косинус фи

Как производят такое количество в С.

Я испытал это:

printf ("type a degree between 0 - 360:\n"); 
scanf ("%f",&float1); 
printf ("cosphi = %f",cosf(float1)); 

, но он дал номер. Он произвел cosphi = 0,52

+0

Это указано во всех [ссылках на 'cosf'] (http://en.cppreference.com/w/c/numeric/math/cos). – usr2564301

ответ

4

Ваш калькулятор сконфигурирован для вычисления тригонометрических функций в градусах.

Триггерные функции C работают в радианах. (Полный круг на 360 градусов, 2 * pi радианы.)

Если вы хотите обрабатывать ввод как градусы, вам необходимо преобразовать значение в радианы, прежде чем передавать его на cosf(), умножив его на 180/pi.

+0

Спасибо. что-то вроде этого. найти cos45. pi radians/4 = 180/4. Когда я поставлю: printf («cosphi =% f», cosf (3.14/4)); печать равна 0,707, что является правильным. –

0

Я получил его для работы. Благодарит миллион :)


#include <stdio.h> 
int main() 
//Convert Trigonometric Angles into Decimals and Radians. 
//Radians are number of Radiuses that are wrapped around the circumference. 
//Pi for half the circle, Radius is wrapped 3.14 times on 180 degrees. r2=d1 . 
//Circumference = 2radius * Pi = Diameter * Pi = 2Pi * radius . 
//KHO2016.no2. mingw (TDM-GCC-32) . c-ansi . 
{ 
//Declare 
float flp1, flp2, flp3, flp4, pi; 
int int1; 

//valuate 
pi = 3.141592654; 
int1 = 180; 

//calculate 
printf ("type a degree between 0 - 360 : "); 
scanf ("%f",&flp1); 
flp2=int1/flp1; // 180 is divided by desired angle 
flp3=pi/flp2; // Pi is divided by the result of 180/desired angle = Radians 
flp4=cosf(flp3); // Result of Pi divided by Radians and fed into the Cosf Radian modulus 
printf ("The Decimal value of Cosinus %.1f degrees = %.3f\n",flp1,flp4); 
printf ("Angle typed in Radians = %f",flp3); 

//Terminate 
return 0; 

}

+1

Рассмотрите использование имен переменных, которые более наглядны, чем «flp123». Кроме того, вы можете просто использовать литеральные значения, такие как 3.141592 и 180, не присваивая их переменным. – nibot

+1

'double angle_deg; scanf ("% f", & angle_deg); printf ("cos% .1f deg =% f \ n", angle_deg, cos (angle_deg * 180.0/M_PI); ' – nibot

+2

Если вы' #include ', тогда вы получите M_PI. – nibot

0

В ответ хорошо @Keith Thompson, функция C работает в радианах и поэтому градусов радиан преобразования требуется.

#ifndef M_PI 
    #define M_PI 3.1415926535897932384626433832795 
#endif 
float angle_radians = angle_degrees * (float) (M_PI/180.0); 

Тем не менее, скорее, непосредственно масштабироваться по pi/180.0, код будет получить более точные ответы, для углов вне основного диапазона, если код первого делает сокращение диапазона и затем весы по pi/180.0. Это связано с тем, что масштабирование pi/180.0 неточно, поскольку машина pi float pi = 3.14159265; не точно математическая π. Уменьшение радианного диапазона, выполненное cos(), ошибочно, так как вычисленное значение радиана, данное ему, не так важно начинать. С градусами, уменьшение диапазона может быть сделано точно.

// Benefit with angles outside -360° to +360° 
float angle_degrees_reduce = fmodf(angle_degrees, 360.0f); 
float angle_radians = angle_degrees_reduce * M_PI/180.0; 

sind() является синусоидальной пример, который выполняет еще лучше за счет снижения до более узкого интервала. С углами вне диапазона от -45 ° до + 45 ° есть преимущество.

Смежные вопросы