وظائف رياضية

العمليات الحسابية في لغة سي هي مجموعة من الوظائف في المكتبة القياسية للغة البرمجة سي والتي تنفذ وظائف حسابية أساسية. [1] [2] تستخدم جميع الوظائف أرقامًا ذات فاصلة عائمة بطريقة أو بأخرى. توفر معايير سي المختلفة مجموعات مختلفة من الوظائف، وإن كانت متوافقة مع الإصدارات السابقة. تتوفر معظم هذه الوظائف أيضًا في مكتبة سي++ القياسية ، وإن كانت في رؤوس مختلفة (يتم تضمين رؤوس سي أيضًا، ولكن فقط كميزة توافقية قديمة).

نظرة عامة على الوظائف

يتم تعريف معظم الدوال الرياضية في <math.h>( <cmath>header في C++). الدوال التي تعمل على الأعداد الصحيحة، مثل abs، labs، div، و ldiv، يتم تعريفها بدلاً من ذلك في <stdlib.h>header ( <cstdlib>header في C++).

تستخدم أي وظيفة تعمل على الزوايا الراديان كوحدة للزاوية. [1]

لا تتوفر كل هذه الوظائف في إصدار C89 من المعيار. بالنسبة للوظائف المتاحة، تقبل الوظائف النوع فقط doubleلحجج الفاصلة العائمة، مما يؤدي إلى تحويلات مكلفة للنوع في الكود الذي يستخدم floatقيم الدقة المفردة. في C99، تم إصلاح هذا النقص من خلال تقديم مجموعات جديدة من الوظائف التي تعمل على floatو long doubleالحجج. يتم تحديد هذه الوظائف من خلال اللواحق fو على التوالي. [3]l

وظيفة وصف
abs
labs
llabs
يحسب القيمة المطلقة لقيمة عدد صحيح
fabs يحسب القيمة المطلقة لقيمة النقطة العائمة
div
ldiv
lldiv
يحسب حاصل قسمة الأعداد الصحيحة والباقي
fmod باقي عملية القسمة على الفاصلة العائمة
remainder تم التوقيع على بقية عملية التقسيم
remquo الباقي الموقّع بالإضافة إلى البتات الثلاثة الأخيرة من عملية القسمة
fma عملية الجمع والضرب المندمجة
fmax أكبر من قيمتين عائمتين
fmin أصغر من قيمتين عائمتين
fdim الفرق الإيجابي بين قيمتين فاصلتين عائمتين
nan
nanf
nanl
يعيد NaN (ليس رقمًا)

الدوال الأسية
exp يعود e مرفوعًا إلى القوة المعطاة
exp2 يعود 2 مرفوعًا إلى القوة المعطاة
expm1 يعود e مرفوعًا إلى القوة المعطاة، ناقص واحد
log يحسب اللوغاريتم الطبيعي (إلى القاعدة e)
log2 يحسب اللوغاريتم الثنائي (إلى القاعدة 2)
log10 يحسب اللوغاريتم المشترك (للقاعدة 10)
log1p يحسب اللوغاريتم الطبيعي (للقاعدة e) لـ 1 بالإضافة إلى العدد المعطى
ilogb يستخرج الأس من العدد
logb يستخرج الأس من العدد

وظائف الطاقة
sqrt يحسب الجذر التربيعي
cbrt يحسب الجذر التكعيبي
hypot يحسب الجذر التربيعي لمجموع مربعي عددين معطيين
pow يرفع رقمًا إلى القوة المعطاة [4]

الدوال المثلثية
sin يحسب الجيب
cos يحسب جيب التمام
tan يحسب الظل
asin يحسب جيب القوس
acos يحسب جيب التمام القوسي
atan يحسب ظل القوس
atan2 يحسب ظل القوس، باستخدام العلامات لتحديد الأرباع

الدوال الزائدية
sinh يحسب الجيب الزائدي
cosh يحسب جيب التمام الزائدي
tanh يحسب الظل الزائدي
asinh يحسب جيب القوس الزائدي
acosh يحسب جيب التمام القوسي الزائدي
atanh يحسب ظل القوس الزائدي
وظائف الخطأ
وجاما
erf يحسب دالة الخطأ
erfc يحسب دالة الخطأ التكميلية
lgamma يحسب اللوغاريتم الطبيعي للقيمة المطلقة لدالة جاما
tgamma يحسب دالة جاما
عمليات النقطة العائمة لأقرب
عدد صحيح


ceil إرجاع أقرب عدد صحيح لا يقل عن القيمة المحددة
floor إرجاع أقرب عدد صحيح ليس أكبر من القيمة المحددة
trunc إرجاع أقرب عدد صحيح ليس أكبر في المقدار من القيمة المحددة
round
lround
llround
إرجاع أقرب عدد صحيح، مع التقريب بعيدًا عن الصفر في الحالات المتوسطة
nearbyint إرجاع أقرب عدد صحيح باستخدام وضع التقريب الحالي
rint
lrint
llrint
يعيد أقرب عدد صحيح باستخدام وضع التقريب الحالي باستثناء إذا كانت النتيجة مختلفة
وظائف معالجة
النقطة العائمة

frexp يحلل رقمًا إلى عدد ذي دلالة وقوة 2
ldexp ضرب رقم في 2 مرفوعًا إلى قوة
modf يقوم بتحليل الرقم إلى أجزاء صحيحة وكسرية
scalbn
scalbln
ضرب رقم بواسطة FLT_RADIX مرفوعًا إلى قوة
nextafter
nexttoward
إرجاع القيمة العائمة القابلة للتمثيل التالية نحو القيمة المحددة
copysign نسخ علامة قيمة النقطة العائمة
تصنيف fpclassify يقوم بتصنيف قيمة النقطة العائمة المعطاة
isfinite التحقق مما إذا كانت الحجة لها قيمة محدودة
isinf التحقق مما إذا كانت الحجة غير محدودة
isnan التحقق مما إذا كانت الحجة NaN
isnormal التحقق من أن الحجة طبيعية
signbit التحقق مما إذا كانت علامة الحجة سلبية

بيئة النقطة العائمة

تضيف C99 العديد من الوظائف والأنواع للتحكم الدقيق في بيئة الفاصلة العائمة. [3] يمكن استخدام هذه الوظائف للتحكم في مجموعة متنوعة من الإعدادات التي تؤثر على حسابات الفاصلة العائمة، على سبيل المثال، وضع التقريب، وفي أي ظروف تحدث الاستثناءات، ومتى يتم مسح الأرقام إلى الصفر، وما إلى ذلك. يتم تعريف وظائف وأنواع بيئة الفاصلة العائمة في <fenv.h>header ( <cfenv>في C++ ).

وظيفة وصف
feclearexcept مسح الاستثناءات ( C99 )
fegetenv يخزن بيئة النقطة العائمة الحالية ( C99 )
fegetexceptflag تخزين علامات الحالة الحالية ( C99 )
fegetround يسترجع اتجاه التقريب الحالي ( C99 )
feholdexcept يحفظ بيئة النقطة العائمة الحالية ويمسح جميع الاستثناءات ( C99 )
feraiseexcept يثير استثناء النقطة العائمة ( C99 )
fesetenv تعيين بيئة النقطة العائمة الحالية ( C99 )
fesetexceptflag تعيين علامات الحالة الحالية ( C99 )
fesetround تعيين اتجاه التقريب الحالي ( C99 )
fetestexcept اختبار ما إذا كانت هناك استثناءات معينة قد تم رفعها ( C99 )
feupdateenv يستعيد بيئة النقطة العائمة، لكنه يحتفظ بالاستثناءات الحالية ( C99 )

الأعداد المركبة

تضيف لغة C99 كلمة رئيسية جديدة _Complex( complexوماكرو ملائم؛ متاح فقط إذا <complex.h>تم تضمين الرأس) توفر الدعم للأعداد المركبة. يمكن تعديل أي نوع من أنواع الفاصلة العائمة باستخدام complex، ثم يتم تعريفه كزوج من الأعداد العائمة. لاحظ أن لغة C99 ولغة C++ لا تنفذان الأعداد المركبة بطريقة متوافقة مع التعليمات البرمجية - حيث توفر الأخيرة بدلاً من ذلك الفئة . std::complex

يتم تعريف جميع العمليات على الأعداد المركبة في <complex.h>العنوان. وكما هو الحال مع الدوال ذات القيمة الحقيقية، فإن اللاحقة fأو lتشير إلى متغير float complexأو long double complexالدالة.

وظيفة وصف

العمليات الأساسية
cabs يحسب القيمة المطلقة ( C99 )
carg يحسب وسيطة عدد مركب ( C99 )
cimag يحسب الجزء التخيلي من عدد مركب ( C99 )
creal يحسب الجزء الحقيقي من عدد مركب ( C99 )
conj يحسب المترافق المعقد ( C99 )
cproj يحسب الإسقاط المعقد في مجال ريمان ( C99 )

عمليات الأسس
cexp يحسب الأسي المعقد ( C99 )
clog يحسب اللوغاريتم المعقد ( C99 )
csqrt يحسب الجذر التربيعي المركب ( C99 )
cpow يحسب القوة المعقدة ( C99 )

العمليات المثلثية
csin يحسب الجيب المركب ( C99 )
ccos يحسب جيب التمام المعقد ( C99 )
ctan يحسب الظل المركب ( C99 )
casin يحسب جيب القوس المعقد ( C99 )
cacos يحسب جيب التمام القوسي المعقد ( C99 )
catan يحسب ظل القوس المعقد ( C99 )

العمليات الزائدية
csinh يحسب الجيب الزائدي المعقد ( C99 )
ccosh يحسب جيب التمام الزائدي المعقد ( C99 )
ctanh يحسب الظل الزائدي المعقد ( C99 )
casinh يحسب جيب القوس الزائدي المعقد ( C99 )
cacosh يحسب جيب التمام القوسي الزائدي المعقد ( C99 )
catanh يحسب ظل القوس الزائدي المعقد ( C99 )

تم تخصيص بعض الوظائف الأكثر تعقيدًا "للاستخدام المستقبلي في C99". [5] يتم توفير التنفيذات من خلال مشاريع مفتوحة المصدر ليست جزءًا من المكتبة القياسية.

وظيفة وصف
وظائف الخطأ cerf يحسب دالة الخطأ المعقدة ( C99 )
cerfc يحسب دالة الخطأ التكميلية المعقدة ( C99 )

وظائف النوع العام

يحدد الرأس <tgmath.h>ماكرو عام النوع لكل دالة رياضية محددة في <math.h>و <complex.h>. وهذا يضيف دعمًا محدودًا للتحميل الزائد للدالة الرياضية: يمكن استخدام نفس اسم الدالة مع أنواع مختلفة من المعلمات؛ وسيتم تحديد الدالة الفعلية في وقت التجميع وفقًا لأنواع المعلمات.

كل ماكرو عام من النوع يتوافق مع دالة محددة لكل من الأعداد الحقيقية والمركبة يغلف ما مجموعه 6 دوال مختلفة: floatو doubleو long doubleو complexومتغيراتها. وحدات الماكرو العامة من النوع التي تتوافق مع دالة محددة للأعداد الحقيقية فقط تغلف ما مجموعه 3 دوال مختلفة: floatو doubleومتغيرات long doubleالدالة.

تتضمن لغة C++ دعمًا أصليًا لزيادة تحميل الوظيفة وبالتالي لا توفر <tgmath.h>الرأس حتى كسمة توافقية.

توليد أرقام عشوائية

يعرف الرأس <stdlib.h>( <cstdlib>في C++) العديد من الوظائف التي يمكن استخدامها لتوليد أرقام عشوائية إحصائيًا. [6]

وظيفة وصف
rand يولد رقمًا عشوائيًا زائفًا بين 0 و RAND_MAX، شاملًا.
srand يقوم بتهيئة مولد أرقام عشوائية زائفة
arc4random يولد رقمًا عشوائيًا زائفًا بين 0 و UINT32_MAX، عادةً باستخدام خوارزمية أفضل منrand
arc4random_uniform يقوم بإنشاء رقم عشوائي بين 0 والقيمة القصوى.
arc4random_buf املأ المخزن المؤقت بتيار بتات عشوائي زائف.
arc4random_stir يقوم بتهيئة مولد أرقام عشوائية زائفة .

لم يتم تعريف عائلة arc4randomوظائف الأرقام العشوائية في معيار POSIX، ولكنها موجودة في بعض libcالتطبيقات الشائعة. كانت تستخدم للإشارة إلى مولد تيار المفاتيح لإصدار مسرب من تشفير RC4 (ومن هنا جاء " RC4 المزعوم ")، ولكن تم تنفيذ خوارزميات مختلفة، عادةً من تشفيرات أخرى مثل ChaCha20 ، منذ ذلك الحين باستخدام نفس الاسم .

إن جودة العشوائية من randعادة ما تكون ضعيفة للغاية بحيث لا يمكن اعتبارها عشوائية إحصائيًا، وتتطلب بذرًا صريحًا. وعادةً ما يُنصح باستخدام arc4randomبدلاً من randعندما يكون ذلك ممكنًا. تقوم بعض مكتبات C بتنفيذ randاستخدام arc4random_uniformداخليًا.

التنفيذات

في أنظمة POSIX مثل Linux و BSD ، يتم تجميع الوظائف الرياضية (كما هو معلن في <math.h>) بشكل منفصل في المكتبة الرياضية . لذلك، إذا تم استخدام أي من هذه الوظائف، فيجب إعطاء الرابط التوجيه . هناك تنفيذات مختلفة، بما في ذلك: libm-lmlibm

تتضمن التنفيذات التي لا تكون بالضرورة تحت اسم libmما يلي:

  • روتينات الرياضيات المحسنة لـ Arm
  • GCE-Math هي نسخة من وظائف الرياضيات C/C++ المكتوبة لـ C++ constexpr(حساب وقت التجميع)
  • CORE-MATH، تقريب صحيح للدقة المفردة والمزدوجة.
  • تتضمن مكتبات الرياضيات SIMD (المتجهة) SLEEF وYeppp! وVCL الخاصة بـ Agner Fog ، بالإضافة إلى بعض المكتبات المغلقة المصدر مثل SVML وDirectXMath. [9]

انظر أيضا

مراجع

  1. ^ من مواصفات ISO/IEC 9899:1999 (PDF) . ص 212، الفقرة 7.12.
  2. ^ Prata, Stephen (2004). C primer plus . Sams Publishing. Appendix B, Section V: The Standard ANSI C Library with C99 Additions. ISBN 0-672-32696-5.
  3. ^ ab Prata, Stephen (2004). C primer plus . Sams Publishing. Appendix B, Section VIII: C99 Numeric Computational Enhancements. ISBN 0-672-32696-5.
  4. ^ من الناحية النحوية، قد يبدو من الملائم استخدام pow( x ,2) أو pow( x ,3) لحساب المربعات أو المكعبات. ومع ذلك، لا يُنصح بذلك في التعليمات البرمجية ذات الأهمية الزمنية. ما لم يعتني التنفيذ بهذه الحالات بشكل خاص في وقت التجميع، فسوف يتم تنفيذ x * x أو x * x * x بشكل أسرع كثيرًا. أيضًا، يجب تفضيل sqrt( x ) و cbrt( x ) على pow( x ,.5) أو pow( x ,1./3).
  5. ^ man cerf(3)، man cerfc(3)، انظر على سبيل المثال https://linux.die.net/man/3/cerf.
  6. ^ "مكتبة GNU C – ISO Random" . تم الاسترجاع في 18 يوليو 2018 .
  7. ^ "الدوال الرياضية — مكتبة LLVM C". libc.llvm.org .
  8. ^ "RLibm: مكتبة Rutgers Architecture and Programming Languages ​​Lab's Correctly Rounded Libm". people.cs.rutgers.edu .
  9. ^ كورديس، بيتر. "intel - أين هو '_mm256_pow_ps' الجوهري لـ Clang؟". Stack Overflow .
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=الدوال_الرياضية_باستخدام_لغة_C&oldid=1231530430#libm"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate