الدوال المثلثيه كيف يتم برمجتها

الناقل : elmasry | الكاتب الأصلى : محمد علاء الدين | المصدر : www.arabteam2000-forum.com

السلام عليكم و رحمة الله و بركاته

فكرت كثيرا عن كيفية تضمين الدوال المثليه مثل sin , cos and tan و ايضا دالة الجذر التربيعى و الأسس داخل الـ c++

بالنسبه للدوال المثلثيه و خصوصا الداله sine
بحثت على الإنترنت فوجدت من يقول انه بإستخدام الــ lookup table او بإستخدام for-loop

و من الأكواد التى وجدتها للداله sin التالى

double mysin1(double x)
{
double numerator = x;
double denominator = 1.0;
double sign = 1.0;
double sin = 0;

 // terms below define the number of terms you want
 int terms=10;

 for ( int i = 1; i <= terms; i++ )
 {
  sin += numerator / denominator * sign;
  numerator *= x * x;
  denominator *= i*2 * (i*2+1);
  sign *= -1;
 }
return sin;
}


عندما جربته لم يعطى نتائج سليمه مع كل الزاويا، لذا حاولت تضمينه بشكل اخر و هو كتابة داله للداله cos و من خلالها استدعاء الدالة sin بكود اخر و هو التالى

ملحوظه : (لمن لا يعرف) الدوال المثلثيه يمكن تضمينها كالتالى
sin (theta) = (PI / 2) - theta
cos(theta) = (PI / 2) - theta


const double PI = 3.14159265358979323846;

double mycos1(double x)
{
        double numerator = 1.0;
        double denominator = 1.0;
        double sign = 1.0;
        double cos = 0;

        // terms below define the number of terms you want
        int terms = 10;
       
        for ( int i = 1; i <= terms; i++ )
        {
                cos += numerator / denominator * sign;
                sign *= -1;
                numerator *= x * x;
                denominator *= (i*2-1) * i*2;
        }
       
        return cos;
}

double mysin2(double x)
{
        return mycos1((PI/2) - x);
}


بالنسبه للداله mysin2 اعطت نتائج سليمه اما الداله mycos فليست كل نتائجها سليمه، لذا قمت بتضمينها مره اخرى بإستخدام المعاداله الذكوره بالأعلى كالتالى
double mycos2(double x)
{
        return mysin1((PI/2) - x);
}


هذه المره اعطت نتائج سليمه، ما ادهشنى هو ان كل من الدالتين mysin1 و mycos1 ليست كل نتائجهم سليمه فى حين ان الدالتين mysin2 و mycos2 يعطوا نتائج سليمه.

طبعا لا اعتقد ان الدالتين sinf و cosf الموجودين فى math.h تم تضمينهم على مرحلتين لذا فسؤالى الأول هو : ما هو الكود المستخدم للدالتين sin , cos?

سؤالى الثانى متعلق بدالة الأس و الجذر التربيعى

اما بالنسبه لدالة الأس فهى سهله
double Power(int pwr,double number)
{
        double sum=1;

        for(int i=1; i<=pwr; i++)
                sum *= number;
}


اما بالنسبه لدالة الجذر التربيعى فقد وجدت بعض الطرق اليدويه للحصول على الجذر التربيعى و لكنى لم استطع تطبيق اى منها. لذا فسؤالى الثانى هو: ما هو الكود المستخدم لدالة الجذر التربيعى؟

و الله ولى التوفيق