مكتبة GNU للحسابات متعددة الدقة
مكتبة GNU للحسابات متعددة الدقة ( GMP ) هي مكتبة مجانية لإجراء العمليات الحسابية بدقة اختيارية ، وتعمل على الأعداد الصحيحة الموقعة ، والأعداد النسبية ، والأعداد العشرية . [ 4 ] لا توجد حدود عملية للدقة باستثناء تلك التي تفرضها الذاكرة المتاحة (قد يصل حجم المعاملات إلى 2 ^32 - 1 بت على الأجهزة ذات 32 بت، و2 ^37 بت على الأجهزة ذات 64 بت). [ 5 ] [ 6 ] تتميز GMP بمجموعة غنية من الدوال، وتتمتع هذه الدوال بواجهة قياسية. الواجهة الأساسية مخصصة للغة C ، ولكن توجد أغلفة للغات أخرى، بما في ذلك Ada و C++ و C# و Julia و. NET و OCaml و Perl و PHP و Python و R و Ruby و Rust .
قبل عام 2008، كانت Kaffe ، وهي آلة افتراضية لجافا ، تستخدم GMP لدعم العمليات الحسابية المدمجة في جافا ذات الدقة العشوائية. [ 7 ] بعد ذلك بوقت قصير، أُضيف دعم GMP إلى GNU Classpath ، كواجهات خلفية لـ java.math.BigIntegerو java.math.BigDecimal. [ 8 ]
تتمثل التطبيقات المستهدفة الرئيسية لـ GMP في تطبيقات وأبحاث التشفير ، وتطبيقات أمن الإنترنت، وأنظمة الجبر الحاسوبي .
تهدف مكتبة GMP إلى أن تكون أسرع من أي مكتبة أخرى للحسابات ذات الدقة العشوائية (الأعداد الكبيرة) لجميع أحجام المعاملات. ومن أهم العوامل التي تُسهم في تحقيق ذلك ما يلي:
- الكلمات الكاملة هي النوع الأساسي لجميع العمليات الحسابية.
- تُستخدم خوارزميات مختلفة لأحجام المعاملات المختلفة ؛ فالخوارزميات الأكثر كفاءة مع الأرقام الكبيرة لا تُستخدم عند التعامل مع الأرقام الصغيرة.
- تُستخدم لغة التجميع (المتخصصة في المعالجات المختلفة) في الحلقات الداخلية الأكثر شيوعًا لتحسينها قدر الإمكان.
تم إصدار أول نسخة من GMP في عام 1991. ويتم تطويرها وصيانتها باستمرار. [ 9 ]
يُعد GMP جزءًا من مشروع GNU (على الرغم من أن موقعه الإلكتروني خارج gnu.org قد يسبب الارتباك)، ويتم توزيعه بموجب رخصة GNU العامة الصغرى (LGPL).
تُستخدم GMP في العمليات الحسابية للأعداد الصحيحة في العديد من أنظمة الجبر الحاسوبي مثل Mathematica [ 10 ] و Maple [ 11 ] . كما تُستخدم أيضًا في مكتبة خوارزميات الهندسة الحسابية (CGAL).
يُعد GMP ضروريًا لبناء مجموعة مترجمات GNU (GCC). [ 12 ]
واجهة مكتبة C
تحدد واجهة مكتبة C ما يلي:
mpz_t(عدد صحيح متعدد الدقة)mpq_t(عدد نسبي متعدد الدقة)mpf_t(عدد الفاصلة العائمة متعدد الدقة)gmp_randstate_t(حالة عشوائية، تُستخدم لإنتاج أرقام عشوائية)
تُسبق الدوال باسم النوع (على سبيل المثال، تُسبق العمليات على الأعداد الصحيحة متعددة الدقة بـ mpz، إلخ).
توفر المكتبة أيضًا أدوات مساعدة إضافية (جميعها مسبوقة بـ gmp)، مثل gmp_scanf، gmp_printf، إلخ.
مثال
فيما يلي مثال على كود C يوضح استخدام مكتبة GMP لضرب وطباعة الأعداد الكبيرة:
#include <stdio.h> #include <gmp.h>int main ( void ) { mpz_t x , y , result ;mpz_init_set_str ( x , "7612058254738945" , 10 ); mpz_init_set_str ( y , "9263591128439081" , 10 ); mpz_init ( result );mpz_mul ( result , x , y ); gmp_printf ( " %Zd \n " "* \n " " %Zd \n " "-------------------- \n " "%Zd \n " , x , y , result );// تحرير الذاكرة المستخدمة mpz_clear ( x ); mpz_clear ( y ); mpz_clear ( result );return 0 ; }يحسب هذا الكود قيمة.
يؤدي تجميع هذا البرنامج وتشغيله إلى هذه النتيجة. ( -lgmpيتم استخدام هذا الخيار عند التجميع على أنظمة من نوع يونكس).
7612058254738945 * 9263591128439081 -------------------- 70514995317761165008628990709545 واجهة مكتبة C++
تحدد واجهة مكتبة C++ الفئات التالية:
mpz_class(يتوافق معmpz_t)mpq_class(يتوافق معmpq_t)mpf_class(يتوافق معmpf_t)gmp_randclass(يقدم أدوات توليد الأرقام العشوائية)
تُدمج الدوال المستقلة في مكتبة C كطرق في فئات C++. تضع مكتبة C++ جميع الرموز بشكل عام، ولا تستخدم مساحة اسم خاصة بها . يُنصح بتجنب استخدامها autoفي التصريحات. [ 13 ] وللعودة إلى نوع C، توفر كل فئة get_mp_t()طريقة مقابلة (على سبيل المثال mpz_class::get_mpz_t()).
مثال
للمقارنة، يمكن كتابة برنامج C++ المكافئ التالي بدلاً من ذلك. ( -lgmpxx -lgmpيتم استخدام العلامات عند التجميع على أنظمة من نوع Unix.)
استيراد < gmpxx . h > ; استيراد std ;int main () { mpz_class x ( "7612058254738945" ); mpz_class y ( "9263591128439081" ); mpz_class result = x * y ;std :: println ( "{} \ n " " * \n " " {} \n " " -------------------- \n " "{}" , x.get_str ( ), y.get_str ( ), result.get_str () );return 0 ; }روابط اللغة
| اسم المكتبة | لغة | رخصة |
|---|---|---|
| مكتبة جنو متعددة الدقة | لغة C ، لغة C++ | إل جي بي إل |
| الرياضيات::GMP | بيرل | إل جي بي إل |
| Math::GMPz و Math::GMPf و Math::GMPq | بيرل | رخصة فنية الإصدار 1.0 + رخصة جنو العمومية الإصدار 1.0 أو أحدث |
| مشروع بايثون متعدد الدقة العام | بايثون | إل جي بي إل |
| حزمة R 'gmp' | R | رخصة جنو العمومية |
| مشروع روبي جيمز | روبي | أباتشي 2.0 |
| روابط Rust FFI لـ GMP و MPFR و MPC | الصدأ | إل جي بي إل |
| مكتبة GNU متعددة الدقة للغة PHP | PHP | PHP |
| إجراءات GNU متعددة الدقة لـ SBCL، مؤرشفة بتاريخ 19 نوفمبر 2020 على موقع Wayback Machine | لغة الشفرة الشائعة | الملكية العامة |
| Ch GMP | الفصل | ملكية خاصة |
| غلاف GMP متوازي لـ BMDFM | BMDFM LISP – C | الملكية العامة |
مترجم لغة هاسكل من غلاسكو (التنفيذ Integerهو في الأساس ربط بـ GMP) | هاسكل | بي إس دي |
| luajit-gmp | LuaJIT | معهد ماساتشوستس للتكنولوجيا |
| غلاف gmp لدلفي | دلفي | معهد ماساتشوستس للتكنولوجيا |
| زاريث | أوكاميل | إل جي بي إل |
| مكتبة Math.Gmp.Native | .شبكة | معهد ماساتشوستس للتكنولوجيا |
| nim-gmp | نيم | معهد ماساتشوستس للتكنولوجيا |
| JGMP | جافا | إل جي بي إل |
انظر أيضاً
- GNU MPFR – مكتبة لإجراء حسابات بدقة عشوائية مع تقريب صحيح، تعتمد على GNU MP
- CLN – مكتبة فئات للدقة التعسفية
- قائمة المكتبات الرياضية مفتوحة المصدر
- MPIR – نسخة معدلة من GMP، غير مُدارة
مراجع
- ↑ "أرشيف GNU MP" . تم الاطلاع عليه بتاريخ 2018-12-03 .
- ^ توربيورن جرانلوند (30 يوليو 2023). "تم إصدار GMP 6.3.0" . تم الاسترجاع في 30 يوليو 2023 .
- ↑ "ملاحظات إصدار GMP 6.3" .
- 1 2 "ما هي ممارسات التصنيع الجيدة؟" . تم الاطلاع عليه بتاريخ 2014-04-07 .
- ↑ غرانلوند، توربيورن (2009-07-06). "مشاكل مع mpz_set_str والسلاسل النصية الضخمة" . تم الاسترجاع في 2013-03-17 .
- ↑ "أخبار GMP 6.0" . تم الاطلاع عليه بتاريخ 2019-10-04 .
- ↑ هيوز، أندرو جون (28 فبراير 2008). "هل تم حذف حسابات GMP؟" . تم الاطلاع عليه بتاريخ 17 مارس 2013 .
- ↑ "GNU Classpath 0.98 "أن تأتي متأخراً خير من ألا تأتي أبداً"" . 2009-02-05 . تم الاسترجاع 2013-03-17 .
- ↑ "مكتبة GNU MP Bignum" . تم الاطلاع عليها بتاريخ 2018-12-03 .
- ↑ "نواة برنامج Mathematica: قضايا في التصميم والتنفيذ" . أكتوبر 2006. تم الاطلاع عليه بتاريخ 17-03-2013 .
- ↑ "مكتبة GNU للدقة المتعددة (GMP)" . مابل سوفت . تم الاطلاع عليه بتاريخ 17-03-2013 .
- يستخدم GCC مكتبة GNU MPFR ، التي بدورها تعتمد على GMP. "سلسلة إصدارات GCC 4.3: التغييرات والميزات الجديدة والإصلاحات" . 2012-11-02 . تم الاطلاع عليه بتاريخ 2013-03-17 .
- ↑ مكتبة GNU للحسابات متعددة الدقة. "قيود واجهة C++ 12.6" . gmplib.org . مشروع GNU.
- برنامج مبرمج بلغة التجميع
- مكتبات لغة البرمجة C
- الحساب الحاسوبي
- برنامج مجاني مكتوب بلغة C
- برنامج مشروع جنو
- المكتبات العددية
- برنامج يستخدم رخصة جنو العمومية الصغرى
