الحساب ذو الدقة التعسفية
في علوم الحاسوب ، يشير مصطلح الحساب ذو الدقة العشوائية ، والذي يُسمى أيضًا حساب الأعداد الكبيرة ، أو حساب الدقة المتعددة ، أو أحيانًا حساب الدقة اللانهائية ، إلى إجراء العمليات الحسابية على أعداد لا يحد من دقتها سوى سعة الذاكرة المتاحة في النظام. وهذا يختلف عن الحساب ذي الدقة الثابتة الأسرع الموجود في معظم وحدات الحساب والمنطق (ALU)، والذي يوفر عادةً دقة تتراوح بين 8 و64 بت .
تتضمن العديد من لغات البرمجة الحديثة دعمًا مدمجًا للأعداد الكبيرة، [ 1 ] [ 2 ] [ 3 ] [ 4 ] بينما توفر لغات أخرى مكتبات لإجراء العمليات الحسابية على الأعداد الصحيحة والأعداد العشرية بدقة غير محدودة . وبدلًا من تخزين القيم على شكل عدد ثابت من البتات مرتبط بحجم سجل المعالج ، تستخدم هذه التطبيقات عادةً مصفوفات أرقام متغيرة الطول .
تُستخدم الدقة المطلقة في التطبيقات التي لا تُمثل فيها سرعة العمليات الحسابية عاملاً مُحدداً، أو عندما تكون النتائج الدقيقة للأعداد الكبيرة جداً مطلوبة. ويجب عدم الخلط بينها وبين الحساب الرمزي الذي تُوفره العديد من أنظمة الجبر الحاسوبي ، والتي تُمثل الأعداد بتعبيرات مثل π · sin(2) ، وبالتالي يُمكنها تمثيل أي عدد قابل للحساب بدقة لا نهائية.
التطبيقات
من التطبيقات الشائعة التشفير بالمفتاح العام ، الذي تستخدم خوارزمياته عادةً العمليات الحسابية مع الأعداد الصحيحة التي تحتوي على مئات الأرقام. [ 5 ] [ 6 ] ويُستخدم أيضًا في الحالات التي تكون فيها الحدود الاصطناعية وحالات تجاوز السعة غير مناسبة. كما أنه مفيد للتحقق من نتائج الحسابات ذات الدقة الثابتة، ولتحديد القيم المثلى أو شبه المثلى للمعاملات اللازمة في الصيغ، على سبيل المثاليظهر ذلك في التكامل الغاوسي . [ 7 ]
تُستخدم الحسابات ذات الدقة العالية لحساب الثوابت الرياضية الأساسية ، مثل π، بدقة تصل إلى ملايين الأرقام، ولتحليل خصائص سلاسل الأرقام [ 8 ] ، أو بشكل أعم، لدراسة السلوك الدقيق للدوال، مثل دالة زيتا لريمان، حيث يصعب استكشاف بعض المسائل باستخدام الطرق التحليلية. ومن الأمثلة الأخرى على ذلك، عرض الصور الكسورية بتكبير عالٍ للغاية، مثل تلك الموجودة في مجموعة ماندلبروت .
يمكن استخدام العمليات الحسابية ذات الدقة العشوائية لتجنب تجاوز السعة ، وهو قيد متأصل في العمليات الحسابية ذات الدقة الثابتة. فكما هو الحال في عداد المسافات في السيارة الذي قد يتغير من 99999 إلى 00000، قد يحدث التفاف في الأعداد الصحيحة ذات الدقة الثابتة إذا تجاوزت قيمتها الحد المسموح به لتمثيلها بدقة ثابتة. تستطيع بعض المعالجات التعامل مع تجاوز السعة عن طريق التشبع ، ما يعني أنه إذا كانت النتيجة غير قابلة للتمثيل، يتم استبدالها بأقرب قيمة قابلة للتمثيل. (في حالة التشبع غير الموقع ذي 16 بت، فإن إضافة أي قيمة موجبة إلى 65535 ستنتج 65535). يمكن لبعض المعالجات توليد استثناء إذا تجاوزت نتيجة العملية الحسابية الدقة المتاحة. عند الضرورة، يمكن معالجة الاستثناء والتعافي منه، على سبيل المثال، يمكن إعادة تشغيل العملية برمجياً باستخدام العمليات الحسابية ذات الدقة العشوائية.
في كثير من الحالات، يمكن للمهمة أو المبرمج ضمان عدم تجاوز قيم الأعداد الصحيحة في تطبيق معين الحد المسموح به لحدوث تجاوز في سعة النظام. قد تستند هذه الضمانات إلى حدود عملية: على سبيل المثال، قد يكون لبرنامج تسجيل الحضور المدرسي حد أقصى يبلغ 4000 طالب. وقد يصمم المبرمج العملية الحسابية بحيث تبقى النتائج الوسيطة ضمن حدود دقة محددة.
تستخدم بعض لغات البرمجة، مثل Lisp و Python و Perl و Haskell و Ruby و Raku ، أو تتيح خيار استخدامها، أعدادًا ذات دقة اختيارية لجميع العمليات الحسابية الصحيحة. وهذا يمكّن الأعداد الصحيحة من النمو إلى أي حجم لا يحده سوى الذاكرة المتاحة للنظام. ورغم أن هذا يقلل من الأداء، إلا أنه يزيل مشكلة النتائج غير الصحيحة (أو الاستثناءات) الناتجة عن تجاوز السعة. كما أنه يضمن تقريبًا تطابق نتائج العمليات الحسابية على جميع الأجهزة، بغض النظر عن حجم الكلمة في أي جهاز . ويُسهم استخدام الأعداد ذات الدقة الاختيارية حصريًا في لغة البرمجة في تبسيطها، لأن العدد هو عدد ، ولا حاجة لأنواع متعددة لتمثيل مستويات الدقة المختلفة.
مشاكل التنفيذ
تُعدّ العمليات الحسابية ذات الدقة العشوائية أبطأ بكثير من العمليات الحسابية التي تستخدم أرقامًا تتناسب تمامًا مع سجلات المعالج، لأن الأخيرة تُنفّذ عادةً باستخدام وحدات المعالجة المادية ، بينما يجب تنفيذ الأولى برمجيًا. حتى في حال افتقار الحاسوب إلى مكونات مادية لبعض العمليات (مثل القسمة الصحيحة، أو جميع عمليات الفاصلة العائمة) وتوفير برمجيات بديلة، فإنه سيستخدم أحجام أرقام مرتبطة ارتباطًا وثيقًا بسجلات الأجهزة المتاحة: كلمة واحدة أو كلمتين فقط. توجد استثناءات، حيث استطاعت بعض الحواسيب ذات أطوال الكلمات المتغيرة في خمسينيات وستينيات القرن الماضي، ولا سيما IBM 1620 و IBM 1401 وسلسلة Honeywell 200 ، معالجة أرقام محدودة فقط بسعة التخزين المتاحة، مع بت إضافي يفصل القيمة.
بنية البيانات
يمكن تخزين الأرقام بصيغة الفاصلة الثابتة ، أو بصيغة الفاصلة العائمة كعدد معنوي مضروب في أسٍّ عشوائي. مع ذلك، بما أن القسمة تُنتج فورًا تقريبًا سلاسل متكررة لا نهائية من الأرقام (مثل 4/7 في النظام العشري، أو 1/10 في النظام الثنائي )، فإذا ما ظهرت هذه الإمكانية ، فسيتم إما اقتطاع التمثيل عند حجم مناسب ، أو استخدام الأعداد النسبية: عدد صحيح كبير للبسط والمقام . لكن حتى مع قسمة القاسم المشترك الأكبر ، يمكن أن تصبح العمليات الحسابية مع الأعداد النسبية غير عملية بسرعة كبيرة : 1 / 99 − 1 / 100 = 1 / 9900 ، وإذا تمت إضافة 1 / 101 ، فإن النتيجة هي 10001 / 999900 .
إن حجم الأرقام ذات الدقة العشوائية محدود عمليًا بإجمالي مساحة التخزين المتاحة ووقت الحساب.
العمليات
طُوِّرت العديد من الخوارزميات لإجراء العمليات الحسابية بكفاءة على الأرقام المخزنة بدقة عشوائية. وعلى وجه الخصوص، بافتراض استخدام N خانة، صُمِّمت خوارزميات لتقليل التعقيد التقاربي لقيم N الكبيرة .
أبسط الخوارزميات هي للجمع والطرح ، حيث يقوم المرء ببساطة بجمع أو طرح الأرقام بالتسلسل، مع الاحتفاظ بالأرقام حسب الضرورة، مما ينتج عنه خوارزمية O ( N ) (انظر ترميز big O ).
المقارنة بسيطة للغاية. قارن الأرقام (أو الكلمات الآلية) ذات الرتبة الأعلى حتى تجد فرقًا. لا داعي لمقارنة بقية الأرقام/الكلمات. أسوأ حالة هي Θ( N ) ، ولكن قد تكتمل العملية بشكل أسرع بكثير مع معاملات ذات مقادير متقاربة.
في عملية الضرب ، تتطلب أبسط الخوارزميات المستخدمة لضرب الأعداد يدويًا (كما تُدرَّس في المرحلة الابتدائية) Θ( N² ) عملية، ولكن تم ابتكار خوارزميات ضرب تحقق تعقيدًا من رتبة O ( N log( N ) log(log( N ))) ، مثل خوارزمية شونهاج-ستراسن ، القائمة على تحويلات فورييه السريعة . كما توجد خوارزميات أخرى ذات تعقيد أقل قليلًا، ولكنها قد تتفوق في الأداء العملي عند قيم N الأصغر . تُعد خوارزمية كاراتسوبا للضرب مثالًا على ذلك.
للاطلاع على عملية القسمة ، انظر خوارزمية القسمة .
للاطلاع على قائمة بالخوارزميات مع تقديرات التعقيد، انظر التعقيد الحسابي للعمليات الرياضية .
للاطلاع على أمثلة بلغة التجميع x86 ، انظر الروابط الخارجية .
دقة مضبوطة مسبقًا
في بعض لغات البرمجة مثل REXX و ooRexx ، يجب تحديد دقة جميع العمليات الحسابية قبل إجرائها. أما لغات أخرى، مثل بايثون وروبي ، فتزيد الدقة تلقائيًا لمنع تجاوز السعة.
مثال
قد ينتج عن حساب المضروب أعداد كبيرة جدًا بسهولة. لا يُشكل هذا مشكلة عند استخدامها في العديد من الصيغ (مثل متسلسلة تايلور ) لأنها تظهر مع حدود أخرى، وبالتالي - مع مراعاة ترتيب الحساب بدقة - لا تُسبب قيم الحساب الوسيطة أي إزعاج. إذا رُغِبَ في الحصول على قيم تقريبية لأعداد المضروب، فإن تقريب ستيرلنغ يُعطي نتائج جيدة باستخدام حسابات الفاصلة العائمة. قد يتم تجاوز أكبر قيمة يُمكن تمثيلها لمتغير صحيح ذي حجم ثابت حتى مع الوسائط الصغيرة نسبيًا كما هو موضح في الجدول أدناه. حتى أعداد الفاصلة العائمة سرعان ما تتجاوز نطاقها، لذا قد يكون من المفيد إعادة صياغة الحسابات بدلالة لوغاريتم العدد.
لكن إذا كانت القيم الدقيقة للمضروب الكبير مطلوبة، فإن البرامج الخاصة مطلوبة، كما هو الحال في الشفرة الزائفة التالية، والتي تنفذ الخوارزمية الكلاسيكية لحساب 1، 1 × 2 ، 1 × 2 × 3 ، 1 × 2 × 3 × 4 ، ...: أعداد المضروب المتتالية.
الثوابت: الحد = 1000 % عدد الأرقام الكافية. الأساس = 10 % أساس الحساب المُحاكى. حد المضروب = 365 % العدد المستهدف للحل، 365! tdigit: Array[0:9] of character = ["0","1","2","3","4","5","6","7","8","9"] المتغيرات: الرقم: مصفوفة من 0 إلى 9 (من 1 إلى الحد الأقصى). الحمل: عدد صحيح (المساعدات أثناء الضرب). الأخير: عدد صحيح (مؤشر إلى أرقام العدد الكبير). النص: مصفوفة من الأحرف (من 1 إلى الحد الأقصى). مساحة مؤقتة للإخراج. digit[*] := 0 % مسح المصفوفة بأكملها. last := 1 % يبدأ العدد الكبير برقم واحد، digit[1] := 1 % رقمه الوحيد هو 1.for n := 1 to FactorialLimit: % Step through production 1!, 2!, 3!, 4!, etc. carry := 0 % ابدأ عملية الضرب في n. for i := 1 to last: % انتقل إلى كل رقم. d := digit[i] * n + carry % اضرب رقمًا واحدًا. digit[i] := d mod Base % احتفظ بالرقم الأصغر من الناتج. carry := d div Base % انقل إلى الرقم التالي.بينما يكون الحمل > 0: % خزّن الحمل المتبقي في العدد الكبير. إذا كان الأخير >= الحد: خطأ("تجاوز السعة"). last := last + 1 % رقم إضافي. digit[last] := carry mod Base carry := carry div Base % قم بإزالة الرقم الأخير من carry. text[*] := " " % الآن، جهّز المخرجات. for i := 1 to last: % حوّل من النظام الثنائي إلى نص. text[Limit - i + 1] := tdigit[digit[i ] ] % عكس الترتيب. print text[Limit - last + 1:Limit], " = ", n, "!"بالنظر إلى المثال، يمكن مناقشة عدد من التفاصيل. أهمها اختيار طريقة تمثيل العدد الكبير. في هذه الحالة، نحتاج فقط إلى قيم صحيحة للأرقام، لذا فإن مصفوفة من الأعداد الصحيحة ذات العرض الثابت كافية. من الملائم أن تمثل العناصر المتتالية في المصفوفة قوى أعلى للأساس.
ثاني أهم قرار هو اختيار أساس الحساب، وهو هنا عشرة. هناك اعتبارات عديدة. يجب أن يكون المتغير d قادرًا على استيعاب ناتج ضرب رقم واحد بالإضافة إلى قيمة الحمل من ضرب الرقم السابق. في النظام العشري، يُعدّ عدد صحيح من 16 بت كافيًا بالتأكيد، إذ يسمح بقيمة تصل إلى 32767. مع ذلك، يُخالف هذا المثال القاعدة، حيث إن قيمة n نفسها ليست محدودة برقم واحد. هذا يعني أن الطريقة ستفشل عندما تكون n أكبر من 3200 تقريبًا. في تطبيق أكثر عمومية، ستستخدم n أيضًا تمثيلًا متعدد الأرقام. من النتائج الأخرى لهذا الاختصار أنه بعد اكتمال عملية الضرب متعددة الأرقام، قد يلزم نقل قيمة الحمل الأخيرة إلى عدة أرقام ذات رتبة أعلى، وليس رقمًا واحدًا فقط.
هناك أيضًا مسألة طباعة النتيجة بالنظام العشري، لتسهيل فهمها. بما أن النظام العشري هو النظام الأساسي، يمكن عرض النتيجة ببساطة عن طريق طباعة الأرقام المتتالية للمصفوفة digit ، ولكن سيظهر الرقم ذو الرتبة الأعلى في النهاية (بحيث يظهر العدد 123 على شكل "321"). يمكن طباعة المصفوفة كاملةً بترتيب عكسي، ولكن ذلك سيعرض العدد بأصفار بادئة ("00000...000123")، وهو ما قد لا يكون واضحًا، لذا تقوم هذه الطريقة بإنشاء التمثيل في متغير نصي مملوء بمسافات، ثم تطبعه. النتائج القليلة الأولى (مع إضافة مسافة كل خمسة أرقام والتعليقات التوضيحية هنا) هي:
| الأعداد العاملية | مدى وصول الأعداد الصحيحة في الحاسوب | ||
|---|---|---|---|
| 1 = | 1! | ||
| 2 = | 2! | ||
| 6 = | 3! | ||
| 24 = | 4! | ||
| 120 = | 5! | 8 بت | 255 |
| 720 = | 6! | ||
| 5040 = | 7! | ||
| 40 320 = | 8! | 16 بت | 65 535 |
| 362880 = | 9! | ||
| 3,628,800 = | 10! | ||
| 39916800 = | 11! | ||
| 479 001 600 = | 12! | 32 بت | 4 294 967 295 |
| 6 227 020 800 = | 13! | ||
| 87 178 291 200 = | 14! | ||
| 1,307,674,368,000 = | 15! | ||
| 20922789888000 = | 16! | ||
| 355 687 428 096 000 = | 17! | ||
| 6 402 373 705 728 000 = | 18! | ||
| 121645100408832000 = | 19! | ||
| 2 432 902 008 176 640 000 = | 20! | 64 بت | 18 446 744 073 709 551 615 |
| 51 090 942 171 709 440 000 = | 21! | ||
| 1,124,000,727,777,607,680,000 = | 22! | ||
| 25852016738884976640000 = | 23! | ||
| 620 448 401 733 239 439 360 000 = | 24! | ||
| 15 511 210 043 330 985 984 000 000 = | 25! | ||
| 403 291 461 126 605 635 584 000 000 = | 26! | ||
| 10 888 869 450 418 352 160 768 000 000 = | 27! | ||
| 304 888 344 611 713 860 501 504 000 000 = | 28! | ||
| 8 841 761 993 739 701 954 543 616 000 000 = | 29! | ||
| 265 252 859 812 191 058 636 308 480 000 000 = | 30! | ||
| 8 222 838 654 177 922 817 725 562 880 000 000 = | 31! | ||
| 263 130 836 933 693 530 167 218 012 160 000 000 = | 32! | ||
| 8 683 317 618 811 886 495 518 194 401 280 000 000 = | 33! | ||
| 295 232 799 039 604 140 847 618 609 643 520 000 000 = | 34! | 128 بت | 340 282 366 920 938 463 463 374 607 431 768 211 455 |
| 10 333 147 966 386 144 929 666 651 337 523 200 000 000 = | 35! | ||
يمكن لهذا التطبيق الاستفادة بشكل أكثر فعالية من العمليات الحسابية المدمجة في الحاسوب. يتمثل أحد الحلول البسيطة في استخدام النظام العشري (مع إجراء التغييرات اللازمة على عملية التحويل للإخراج)، أو، مع متغيرات حاسوبية واسعة بما يكفي (مثل الأعداد الصحيحة 32 بت)، يمكننا استخدام أنظمة حسابية أكبر، مثل 10000. يوفر العمل بنظام قوى العدد 2، الأقرب إلى عمليات الأعداد الصحيحة المدمجة في الحاسوب، مزايا عديدة، على الرغم من أن التحويل إلى نظام عشري للإخراج يصبح أكثر صعوبة. في الحواسيب الحديثة، تستغرق عمليات الجمع والضرب وقتًا ثابتًا بغض النظر عن قيم المعاملات (طالما أن المعاملات تتناسب مع كلمة الآلة الواحدة)، لذا هناك مكاسب كبيرة في ضغط أكبر قدر ممكن من العدد الكبير في كل عنصر من عناصر مصفوفة الأرقام. قد يوفر الحاسوب أيضًا إمكانية تقسيم الناتج إلى رقم وحمل دون الحاجة إلى عمليتي باقي القسمة والقسمة كما في المثال، وتوفر جميع وحدات الحساب تقريبًا علامة حمل يمكن استغلالها في عمليات الجمع والطرح متعددة الدقة . هذا النوع من التفاصيل هو مادة أساسية لمبرمجي لغة الآلة، ويمكن لروتين الأعداد الكبيرة المناسب في لغة التجميع أن يعمل بشكل أسرع من نتيجة ترجمة لغة عالية المستوى، والتي لا توفر وصولاً مباشراً إلى مثل هذه المرافق ولكنها بدلاً من ذلك تقوم بربط عبارات المستوى العالي بنموذجها الخاص بالآلة المستهدفة باستخدام مترجم محسن.
في عملية ضرب رقم واحد، يجب أن تكون متغيرات العمل قادرة على استيعاب القيمة (الأساس - 1) ² + الحمل ، حيث تكون القيمة القصوى للحمل هي (الأساس - 1) . وبالمثل، فإن المتغيرات المستخدمة لفهرسة مصفوفة الأرقام محدودة العرض. تتمثل إحدى الطرق البسيطة لتوسيع الفهارس في التعامل مع أرقام العدد الكبير في كتل ذات حجم مناسب، بحيث يكون العنونة عبر (الكتلة i ، الرقم j )، حيث يكون i و j عددين صحيحين صغيرين. أو يمكن اللجوء إلى استخدام تقنيات الأعداد الكبيرة لمتغيرات الفهرسة. في النهاية، تفرض سعة تخزين الجهاز ووقت التنفيذ قيودًا على حجم المسألة.
تاريخ
كان أول حاسوب تجاري من شركة IBM، وهو IBM 702 ( جهاز يعمل بتقنية الصمامات المفرغة ) في منتصف خمسينيات القرن الماضي، يُنفذ العمليات الحسابية للأعداد الصحيحة بالكامل في مكوناته المادية على سلاسل رقمية بأي طول يتراوح بين 1 و511 رقمًا. ولعل أول تطبيق برمجي واسع الانتشار للعمليات الحسابية ذات الدقة العشوائية كان ذلك في لغة Maclisp . وفي وقت لاحق، حوالي عام 1980، وفر نظاما التشغيل VAX/VMS و VM/CMS إمكانية التعامل مع الأعداد الكبيرة (bingum) كمجموعة من دوال السلاسل النصية في أحدهما، وفي لغتي البرمجة EXEC 2 و REXX في الآخر.
كان تطبيقٌ مبكرٌ واسع الانتشار متاحًا عبر جهاز IBM 1620 الذي طُوِّر بين عامي 1959 و1970. كان جهاز 1620 جهازًا للأرقام العشرية يستخدم ترانزستورات منفصلة، ولكنه كان مزودًا بأجهزة (تستخدم جداول بحث ) لإجراء عمليات حسابية على الأعداد الصحيحة على سلاسل رقمية يتراوح طولها بين رقمين وأي طول متاح في الذاكرة. أما بالنسبة للحسابات العشرية، فقد اقتصر الجزء الكسري على مئة رقم أو أقل، واقتصر الأس على رقمين فقط. كانت أكبر ذاكرة متوفرة تتسع لستين ألف رقم، إلا أن مُجمِّعات لغة فورتران لجهاز 1620 استقرت على أحجام ثابتة مثل 10، مع إمكانية تحديد حجم إضافي على بطاقة التحكم إذا لم يكن الحجم الافتراضي مُرضيًا.
مكتبات البرامج
يتم تنفيذ العمليات الحسابية ذات الدقة التعسفية في معظم برامج الكمبيوتر عن طريق استدعاء مكتبة خارجية توفر أنواع البيانات والإجراءات الفرعية لتخزين الأرقام بالدقة المطلوبة ولإجراء العمليات الحسابية.
تختلف المكتبات في طرق تمثيل الأعداد ذات الدقة العشوائية، فبعضها يعمل فقط مع الأعداد الصحيحة، بينما يخزن البعض الآخر أعداد الفاصلة العائمة في أنظمة حسابية متنوعة (العشرية أو الثنائية). وبدلاً من تمثيل العدد كقيمة واحدة، تخزن بعض المكتبات الأعداد كزوج من البسط والمقام ( الأعداد النسبية )، ويمكن لبعضها الآخر تمثيل الأعداد القابلة للحساب تمثيلاً كاملاً ، وإن كان ذلك ضمن حدود معينة للتخزين. في الأساس، لا تستطيع آلات تورينج تمثيل جميع الأعداد الحقيقية ، لأن عدد عناصرها محدود .يتجاوز عدد.
انظر أيضاً
مراجع
- ↑ dotnet-bot. "BigInteger Struct (System.Numerics)" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 22-02-2022 .
- ↑ "PEP 237 -- توحيد الأعداد الصحيحة الطويلة والأعداد الصحيحة" . Python.org . تم الاطلاع عليه بتاريخ 23-05-2022 .
- ↑ "BigInteger (Java Platform SE 7 )" . docs.oracle.com . تم الاطلاع عليه بتاريخ 22-02-2022 .
- ↑ "BigInt - JavaScript | MDN" . developer.mozilla.org . تم الاطلاع عليه بتاريخ 22-02-2022 .
- ↑ جاكي تشينغ (23 مايو 2007). "باحثون: كسر مفتاح مكون من 307 رقمًا يعرض RSA 1024 بت للخطر" .
- ↑ "مختبرات RSA - 3.1.5 ما هو حجم المفتاح الأمثل في نظام تشفير RSA؟" . مؤرشف من الأصل بتاريخ 1 أبريل 2012. تم الاطلاع عليه بتاريخ 31 مارس 2012 .يوصي بأن تكون مفاتيح RSA المهمة 2048 بت (حوالي 600 رقم).
- ^ لوران فوس (2006). التكامل الرقمي مع الخطأ المولود بدقة تحكيمية. النموذج والمحاكاة (تقرير) (باللغة الفرنسية). جامعة هنري بوانكاريه - نانسي آي.
- ↑ آر كي باثريا (1962). "دراسة إحصائية للعشوائية بين أول 10000 رقم من باي" . رياضيات الحساب . 16 (78): 188-197 . doi : 10.1090/s0025-5718-1962-0144443-7 . تاريخ الاسترجاع: 10 يناير 2014 .مثال على اقتباس من هذه المقالة: "إن مثل هذا النمط المتطرف خطير حتى لو تم تخفيفه بواسطة أحد الكتل المجاورة له"؛ كان هذا هو حدوث التسلسل 77 ثمانية وعشرين مرة في كتلة واحدة من ألف رقم.
للمزيد من القراءة
- كنوت، دونالد (2008). الخوارزميات شبه العددية . فن برمجة الحاسوب . المجلد 2 ( الطبعة الثالثة). أديسون-ويسلي. ISBN 978-0-201-89684-8.القسم 4.3.1: الخوارزميات الكلاسيكية
- ديريك وود (1984). النماذج والبرمجة باستخدام باسكال . دار نشر علوم الحاسوب. رقم ISBN 0-914894-45-5.
- ريتشارد كراندال، كارل بوميرانس (2005). الأعداد الأولية . سبرينغر-فيرلاغ. ISBN 9780387252827.الفصل التاسع: خوارزميات سريعة للحسابات ذات الأعداد الصحيحة الكبيرة
روابط خارجية
- يناقش الفصل 9.3 من كتاب "فن التجميع" لراندال هايد الحساب متعدد الدقة، مع أمثلة بلغة التجميع x86 .
- مهمة Rosetta Code: الأعداد الصحيحة ذات الدقة التعسفية. دراسات حالة على غرار الطريقة التي تحسب بها أكثر من 95 لغة برمجة قيمة 5**4**3**2 باستخدام الحساب ذي الدقة التعسفية.
- الحساب الحاسوبي
- خوارزميات الحساب الحاسوبي
