.\" -*- coding: UTF-8 -*- '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH matherr 3 "17 مايو 2025" "صفحات دليل لينكس 6.18" .SH الاسم matherr \- معالجة استثناءات مكتبة الرياضيات SVID .SH المكتبة مكتبة الرياضيات (\fIlibm\fP،\ \fI\-lm\fP) .SH موجز .nf \fB#include \fP .P \fB[[deprecated]] int matherr(struct exception *\fP\fIexc\fP\fB);\fP .P \fB[[deprecated]] extern _LIB_VERSION_TYPE _LIB_VERSION;\fP .fi .SH الوصف .\" glibc commit 813378e9fe17e029caf627cab76fe23eb46815fa \fIملاحظة\fP: الآلية الموصوفة في هذه الصفحة لم تعد مدعومة من glibc. قبل glibc 2.27، كانت قد وُسمت بأنها مهملة. منذ glibc 2.27، أُزيلت الآلية بالكامل. يجب على التطبيقات الجديدة استخدام التقنيات الموصوفة في \fBmath_error\fP(7) و \fBfenv\fP(3). توثق هذه الصفحة آلية \fBmatherr\fP() كمساعدة لصيانة ونقل التطبيقات القديمة. .P يحدد تعريف واجهة النظام V (SVID) أن دوال الرياضيات المختلفة يجب أن تستدعي دالة تُسمى \fBmatherr\fP() إذا اكتُشف استثناء رياضي. تُستدعى هذه الدالة قبل أن تعود دالة الرياضيات؛ بعد أن تعود \fBmatherr\fP()، يعود النظام بعد ذلك إلى دالة الرياضيات، والتي بدورها تعود إلى المستدعي. .P لاستخدام \fBmatherr\fP()، يجب على المبرمج تعريف ماكرو اختبار الميزة \fB_SVID_SOURCE\fP (قبل تضمين \fIأي\fP ملفات رأس)، وتعيين القيمة \fB_SVID_\fP إلى المتغير الخارجي \fB_LIB_VERSION\fP. .P يوفر النظام نسخة مبدئية من \fBmatherr\fP(). لا تفعل هذه النسخة شيئًا، وتعيد صفرًا (انظر أدناه لأهمية ذلك). يمكن تجاوز \fBmatherr\fP() المبدئية بواسطة نسخة يُعرفها المبرمج، والتي ستُستدعى عند حدوث استثناء. تُستدعى الدالة بوسيط واحد، مؤشر إلى بنية \fIexception\fP، مُعرفة كالتالي: .P .in +4n .EX struct exception { int type; /* نوع الاستثناء */ char *name; /* اسم الدالة المسببة للاستثناء */ double arg1; /* المعامل الأول للدالة */ double arg2; /* المعامل الثاني للدالة */ double retval; /* القيمة المعادة من الدالة */ } .EE .in .P حقل \fItype\fP له إحدى القيم التالية: .TP 12 \fBDOMAIN\fP حدث خطأ نطاق (كان وسيط الدالة خارج النطاق الذي عُرفت له الدالة). تعتمد قيمة الإرجاع على الدالة؛ يُضبط \fIerrno\fP إلى \fBEDOM\fP. .TP \fBSING\fP حدث خطأ قطب (نتيجة الدالة هي لانهاية). قيمة الإرجاع في معظم الحالات هي \fBHUGE\fP (أكبر رقم فاصلة عائمة بدقة مفردة)، موقعة بشكل مناسب. في معظم الحالات، يُضبط \fIerrno\fP إلى \fBEDOM\fP. .TP \fBOVERFLOW\fP حدث فيضان. في معظم الحالات، تُعاد القيمة \fBHUGE\fP، ويُضبط \fIerrno\fP إلى \fBERANGE\fP. .TP \fBUNDERFLOW\fP حدث تدفق سفلي. تُعاد 0.0، ويُضبط \fIerrno\fP إلى \fBERANGE\fP. .TP \fBTLOSS\fP فقدان كلي للدلالة. تُعاد 0.0، ويُضبط \fIerrno\fP إلى \fBERANGE\fP. .TP \fBPLOSS\fP فقدان جزئي للدلالة. هذه القيمة غير مستخدمة في glibc (وفي العديد من الأنظمة الأخرى). .P الحقلان \fIarg1\fP و \fIarg2\fP هما المعاملان المقدمين للدالة (\fIarg2\fP غير معرف للدوال التي تأخذ معاملاً واحداً فقط). .P يحدد الحقل \fIretval\fP القيمة المُرجَعة التي سترجعها الدالة الرياضية إلى مستدعيها. يمكن للدالة \fBmatherr\fP() المُعرَّفة من قبل المبرمج تعديل هذا الحقل لتغيير القيمة المُرجَعة للدالة الرياضية. .P إذا أرجع الدالة \fBmatherr\fP() صفراً، فإن النظام يضبط \fIerrno\fP كما هو موصوف أعلاه، وقد يطبع رسالة خطأ على الخطأ المعياري (انظر أدناه). .P إذا أرجع الدالة \fBmatherr\fP() قيمة غير صفرية، فإن النظام لا يضبط \fIerrno\fP، ولا يطبع رسالة خطأ. .SS "الدوال الرياضية التي تستخدم matherr()" يسرد الجدول أدناه الدوال والظروف التي تُستدعى فيها \fBmatherr\fP(). يشير عمود "النوع" إلى القيمة المُسندة إلى \fIexc\->type\fP عند استدعاء \fBmatherr\fP(). عمود "النتيجة" هو القيمة المُرجَعة المبدئية المُسندة إلى \fIexc\->retval\fP. .P يصف العمودان "Msg?" و "errno" السلوك المبدئي إذا أرجع \fBmatherr\fP() صفراً. إذا احتوى عمود "Msg?" على "y"، فإن النظام يطبع رسالة خطأ على الخطأ المعياري. .P يستخدم الجدول الرموز والاختصارات التالية: .P .RS .TS l l. x المعامل الأول للدالة y المعامل الثاني للدالة fin قيمة منتهية للمعامل neg قيمة سالبة للمعامل int قيمة صحيحة للمعامل o/f النتيجة فاضت u/f النتيجة نقصت |x| القيمة المطلقة لـ x X_TLOSS ثابت مُعرَّف في \f[I]\fR .TE .RE .\" Details below from glibc 2.8's sysdeps/ieee754/k_standard.c .\" A subset of cases were test by experimental programs. .TS lB lB lB cB lB l l l c l. الدالة Type النتيجة Msg? errno acos(|x|>1) المجال HUGE y EDOM asin(|x|>1) المجال HUGE y EDOM atan2(0,0) المجال HUGE y EDOM .\" retval is 0.0/0.0 acosh(x<1) المجال NAN y EDOM .\" retval is 0.0/0.0 atanh(|x|>1) المجال NAN y EDOM .\" retval is x/0.0 atanh(|x|==1) مفرد (x>0.0)? y EDOM \ \ HUGE_VAL : \ \ \-HUGE_VAL cosh(fin) o/f OVERFLOW HUGE n ERANGE sinh(fin) o/f OVERFLOW (x>0.0) ? n ERANGE \ \ HUGE : \-HUGE sqrt(x<0) المجال 0.0 y EDOM hypot(fin,fin) o/f OVERFLOW HUGE n ERANGE exp(fin) o/f OVERFLOW HUGE n ERANGE exp(fin) u/f UNDERFLOW 0.0 n ERANGE exp2(fin) o/f OVERFLOW HUGE n ERANGE exp2(fin) u/f UNDERFLOW 0.0 n ERANGE exp10(fin) o/f OVERFLOW HUGE n ERANGE exp10(fin) u/f UNDERFLOW 0.0 n ERANGE j0(|x|>X_TLOSS) TLOSS 0.0 y ERANGE j1(|x|>X_TLOSS) TLOSS 0.0 y ERANGE jn(|x|>X_TLOSS) TLOSS 0.0 y ERANGE y0(x>X_TLOSS) TLOSS 0.0 y ERANGE y1(x>X_TLOSS) TLOSS 0.0 y ERANGE yn(x>X_TLOSS) TLOSS 0.0 y ERANGE y0(0) المجال \-HUGE y EDOM y0(x<0) المجال \-HUGE y EDOM y1(0) المجال \-HUGE y EDOM y1(x<0) المجال \-HUGE y EDOM yn(n,0) المجال \-HUGE y EDOM yn(x<0) المجال \-HUGE y EDOM lgamma(fin) o/f OVERFLOW HUGE n ERANGE lgamma(\-int) or مفرد HUGE y EDOM \ \ lgamma(0) tgamma(fin) o/f OVERFLOW HUGE_VAL n ERANGE tgamma(\-int) مفرد NAN y EDOM tgamma(0) مفرد copysign( y ERANGE \ \ HUGE_VAL,x) log(0) مفرد \-HUGE y EDOM log(x<0) المجال \-HUGE y EDOM .\" different from log() log2(0) مفرد \-HUGE n EDOM .\" different from log() log2(x<0) المجال \-HUGE n EDOM log10(0) مفرد \-HUGE y EDOM log10(x<0) المجال \-HUGE y EDOM pow(0.0,0.0) المجال 0.0 y EDOM pow(x,y) o/f OVERFLOW HUGE n ERANGE pow(x,y) u/f UNDERFLOW 0.0 n ERANGE pow(NaN,0.0) المجال x n EDOM .\" +0 and -0 0**neg المجال 0.0 y EDOM neg**non\-int المجال 0.0 y EDOM scalb() o/f OVERFLOW (x>0.0) ? n ERANGE \ \ HUGE_VAL : \ \ \-HUGE_VAL scalb() u/f UNDERFLOW copysign( n ERANGE \ \ \ \ 0.0,x) fmod(x,0) المجال x y EDOM .\" retval is 0.0/0.0 remainder(x,0) المجال NAN y EDOM .TE .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBmatherr\fP() T} سلامة الخيوط MT\-Safe .TE .SH أمثلة يُظهر البرنامج المثال استخدام \fBmatherr\fP() عند استدعاء \fBlog\fP(3). يأخذ البرنامج حتى ثلاث وسائط لسطر الأوامر. الوسيطة الأولى هي رقم الفاصلة العائمة الذي يُعطى لـ \fBlog\fP(3). إذا وُفرت الوسيطة الثانية الاختيارية، فسيُضبط \fB_LIB_VERSION\fP على \fB_SVID_\fP بحيث يُستدعى \fBmatherr\fP()، ويُستخدم العدد الصحيح المقدم في وسيطة سطر الأوامر كقيمة إرجاع من \fBmatherr\fP(). إذا وُفرت وسيطة سطر الأوامر الثالثة الاختيارية، فإنها تُحدد قيمة إرجاع بديلة يجب أن يُسندها \fBmatherr\fP() كقيمة إرجاع لدالة الرياضيات. .P التشغيل المثال التالي، حيث يُعطى \fBlog\fP(3) وسيطة بقيمة 0.0، لا يستخدم \fBmatherr\fP(): .P .in +4n .EX $\fB ./a.out 0.0\fP errno: Numerical result out of range x=\-inf .EE .in .P في التشغيل التالي، يُستدعى \fBmatherr\fP()، ويُرجع 0: .P .in +4n .EX $\fB ./a.out 0.0 0\fP matherr SING exception in log() function args: 0.000000, 0.000000 retval: \-340282346638528859811704183484516925440.000000 log: SING error errno: Numerical argument out of domain x=\-340282346638528859811704183484516925440.000000 .EE .in .P الرسالة "log: خطأ SING" طُبعت بواسطة مكتبة C. .P في التشغيل التالي، يُستدعى \fBmatherr\fP()، ويُرجع قيمة غير صفرية: .P .in +4n .EX $\fB ./a.out 0.0 1\fP matherr SING exception in log() function args: 0.000000, 0.000000 retval: \-340282346638528859811704183484516925440.000000 x=\-340282346638528859811704183484516925440.000000 .EE .in .P في هذه الحالة، لم تطبع مكتبة C رسالة، ولم يُضبط \fIerrno\fP. .P في التشغيل التالي، يُستدعى \fBmatherr\fP()، ويُغير قيمة إرجاع دالة الرياضيات، ويُرجع قيمة غير صفرية: .P .in +4n .EX $\fB ./a.out 0.0 1 12345.0\fP matherr SING exception in log() function args: 0.000000, 0.000000 retval: \-340282346638528859811704183484516925440.000000 x=12345.000000 .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (matherr.c) \& .EX #define _SVID_SOURCE #include #include #include #include \& static int matherr_ret = 0; /* Value that matherr() should return */ static int change_retval = 0; /* Should matherr() change function\[aq]s return value? */ static double new_retval; /* New function return value */ \& int matherr(struct exception *exc) { fprintf(stderr, "matherr %s exception in %s() function\[rs]n", (exc\->type == DOMAIN) ? "DOMAIN" : (exc\->type == OVERFLOW) ? "OVERFLOW" : (exc\->type == UNDERFLOW) ? "UNDERFLOW" : (exc\->type == SING) ? "SING" : (exc\->type == TLOSS) ? "TLOSS" : (exc\->type == PLOSS) ? "PLOSS" : "???", exc\->name); fprintf(stderr, " args: %f, %f\[rs]n", exc\->arg1, exc\->arg2); fprintf(stderr, " retval: %f\[rs]n", exc\->retval); \& if (change_retval) exc\->retval = new_retval; \& return matherr_ret; } \& int main(int argc, char *argv[]) { double x; \& if (argc < 2) { fprintf(stderr, "Usage: %s " " [ []]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (argc > 2) { _LIB_VERSION = _SVID_; matherr_ret = atoi(argv[2]); } \& if (argc > 3) { change_retval = 1; new_retval = atof(argv[3]); } \& x = log(atof(argv[1])); if (errno != 0) perror("errno"); \& printf("x=%f\[rs]n", x); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBfenv\fP(3), \fBmath_error\fP(7), \fBstandards\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .