random(3)

الاسم
random، srandom، initstate، setstate - مولد الأعداد العشوائية

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <stdlib.h>

long random(void);
void srandom(unsigned int seed);

char *initstate(size_t n;
                unsigned int seed, char state[n], size_t n);
char *setstate(char *state);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

random()، srandom()، initstate()، setstate():
    _XOPEN_SOURCE >= 500
        || /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

الوصف
تستخدم الدالة random() مولد أعداد عشوائية ذو تغذية راجعة جمعية غير خطية، يستخدم جدولاً مبدئياً بحجم 31 عدداً صحيحاً طويلاً لإرجاع أعداد شبه عشوائية متتالية في النطاق من 0 إلى 2^31 - 1. فترة هذا المولد كبيرة جداً، تقريباً 16 * ((2^31) - 1).

تضبط الدالة srandom() معاملها كبذرة لتسلسل جديد من الأعداد الصحيحة شبه العشوائية التي سترجعها random(). هذه التسلسلات قابلة للتكرار باستدعاء srandom() بنفس قيمة البذرة. إذا لم تُقدم قيمة بذرة، تُزرع الدالة random() آلياً بقيمة 1.

تسمح الدالة initstate() بتهيئة مصفوفة حالة state لاستخدامها بواسطة random(). يُستخدم حجم مصفوفة الحالة n بواسطة initstate() لتقرير مدى تعقيد مولد الأعداد العشوائية الذي ينبغي استخدامه—كلما كانت مصفوفة الحالة أكبر، كانت الأعداد العشوائية أفضل. القيم "المثلى" الحالية لحجم مصفوفة الحالة n هي 8، 32، 64، 128، و256 بايت؛ تُقرّب الكميات الأخرى إلى الأسفل لأقرب كمية معروفة. يؤدي استخدام أقل من 8 بايت إلى خطأ. seed هي بذرة التهيئة، التي تحدد نقطة بداية لتسلسل الأعداد العشوائية، وتوفر إمكانية إعادة التشغيل من نفس النقطة.

تغير الدالة setstate() مصفوفة الحالة المستخدمة بواسطة الدالة random(). تُستخدم مصفوفة الحالة state لتوليد الأعداد العشوائية حتى الاستدعاء التالي لـ initstate() أو setstate(). يجب أن تكون state قد هُيئت أولاً باستخدام initstate() أو أن تكون نتيجة استدعاء سابق لـ setstate().

قيمة الإرجاع
ترجع الدالة random() قيمة بين 0 و (2^31) - 1. لا ترجع الدالة srandom() أية قيمة.

ترجع الدالة initstate() مؤشراً إلى مصفوفة الحالة السابقة. عند الفشل، ترجع NULL، ويُضبط errno للإشارة إلى الخطأ.

عند النجاح، ترجع setstate() مؤشراً إلى مصفوفة الحالة السابقة. عند الفشل، ترجع NULL، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EINVAL
    كان المعامل state المُعطى لـ setstate() هو NULL.

EINVAL
    حُددت مصفوفة حالة أقل من 8 بايت لـ initstate().

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
random()، srandom()، initstate()، setstate() | سلامة الخيوط | MT-Safe

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001، 4.3BSD.

ملاحظات
توليد الأعداد العشوائية موضوع معقد. يقدم كتاب Numerical Recipes in C: The Art of Scientific Computing (وليام إتش. بريس، برايان بي. فلانري، سول إيه. تيوكولسكي، وليام تي. فيترلينغ؛ نيويورك: مطبعة جامعة كامبريدج، 2007، الطبعة الثالثة) نقاشاً ممتازاً للمسائل العملية لتوليد الأعداد العشوائية في الفصل 7 (الأعداد العشوائية).

لنقاش نظري أكثر يغطي أيضاً العديد من المسائل العملية بعمق، انظر الفصل 3 (الأعداد العشوائية) في كتاب دونالد إي. كنوث The Art of Computer Programming، المجلد 2 (الخوارزميات شبه العددية)، الطبعة الثانية؛ ريدينغ، ماساتشوستس: شركة أديسون-ويسلي للنشر، 1981.

تحذيرات
لا ينبغي استخدام الدالة random() في البرامج متعددة الخيوط حيث يُطلب سلوك قابل للتكرار. استخدم random_r(3) لهذا الغرض.

العلل
وفقاً لـ POSIX، ينبغي لـ initstate() إرجاع NULL عند الخطأ. في تطبيق glibc، يُضبط errno (كما هو محدد) عند الخطأ، لكن الدالة لا ترجع NULL.

انظر أيضًا
getrandom(2)، drand48(3)، rand(3)، random_r(3)، srand(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.