تمثيلات الأعداد الموقعة

في مجال الحوسبة ، يلزم استخدام تمثيلات الأعداد الموقعة لترميز الأعداد السالبة في أنظمة الأعداد الثنائية.

في الرياضيات ، تُمثَّل الأعداد السالبة في أي نظام عدٍّ بإضافة علامة الطرح ("−"). مع ذلك، في ذاكرة الوصول العشوائي ( RAM ) أو سجلات وحدة المعالجة المركزية (CPU )، تُمثَّل الأعداد فقط كسلاسل من البتات ، دون رموز إضافية. أشهر أربع طرق لتوسيع نظام العد الثنائي لتمثيل الأعداد الموقعة هي: طريقة الإشارة والمقدار ، وطريقة المتمم الأحادي ، وطريقة المتمم الثنائي ، وطريقة الإزاحة الثنائية . تستخدم بعض الطرق البديلة إشارات ضمنية بدلًا من الإشارات الصريحة، مثل طريقة العد الثنائي السالب باستخدام الأساس −2 . يمكن ابتكار طرق مماثلة لأنظمة عد أخرى ، سواء كانت موجبة أو سالبة أو كسرية أو غيرها من التطبيقات المشابهة.

لا يوجد معيار قاطع يُرجّح تفوق أي من التمثيلات على الآخر بشكل عام. بالنسبة للأعداد الصحيحة ، يُستخدم تمثيل المتمم الثنائي في معظم أجهزة الحوسبة الحالية، على الرغم من أن أجهزة الحاسوب المركزية من سلسلة Unisys ClearPath Dorado تستخدم المتمم الأحادي.

تاريخ

تميزت بدايات الحوسبة الرقمية بتنافس الأفكار حول كلٍ من تكنولوجيا الأجهزة وتكنولوجيا الرياضيات (أنظمة الترقيم). وكان أحد أبرز النقاشات حول صيغة الأعداد السالبة، حيث أبدى بعض أبرز خبراء تلك الحقبة آراءً متباينة وقوية. فقد أيّد فريقٌ نظام المتمم الثنائي ، وهو النظام السائد اليوم. بينما أيّد فريقٌ آخر نظام المتمم الأحادي، حيث تُشكّل القيمة السالبة بعكس جميع بتات نظيرتها الموجبة. أما الفريق الثالث، فقد أيّد نظام الإشارة والمقدار، حيث تُغيّر القيمة من موجبة إلى سالبة ببساطة عن طريق تبديل البت الأعلى رتبة في الكلمة.

كانت هناك حجج مؤيدة ومعارضة لكل نظام من هذه الأنظمة. سمح نظام الإشارة والمقدار بتتبع تفريغات الذاكرة بسهولة أكبر (وهي عملية شائعة في ستينيات القرن الماضي) لأن القيم العددية الصغيرة تستخدم عددًا أقل من البتات التي تحتوي على الرقم 1. كانت هذه الأنظمة تُجري عمليات حسابية بنظام المتمم الأحادي داخليًا، لذا كان لا بد من تحويل الأرقام إلى قيم المتمم الأحادي عند إرسالها من المسجل إلى وحدة العمليات الحسابية، ثم تحويلها مرة أخرى إلى نظام الإشارة والمقدار عند إرسال النتيجة إلى المسجل . تطلبت الإلكترونيات عددًا أكبر من البوابات المنطقية مقارنةً بالأنظمة الأخرى ، وهو ما كان مصدر قلق بالغ في ظل التكلفة العالية وتغليف الترانزستورات المنفصلة. كانت شركة IBM من أوائل الداعمين لنظام الإشارة والمقدار، ولعلّ أشهر أنظمة الحواسيب التي استخدمته هي سلسلة 704 و 709 و 709x . 

سمح نظام المتمم الأحادي بتصميمات أجهزة أبسط نوعًا ما، إذ لم تكن هناك حاجة لتحويل القيم عند تمريرها من وإلى وحدة العمليات الحسابية. لكنه يشترك أيضًا مع نظام الإشارة والمقدار في خاصية غير مرغوب فيها: القدرة على تمثيل الصفر السالب (-0). يتصرف الصفر السالب تمامًا مثل الصفر الموجب: عند استخدامه كمعامل في أي عملية حسابية، ستكون النتيجة واحدة سواء كان المعامل صفرًا موجبًا أو سالبًا. يكمن العيب في أن وجود شكلين للقيمة نفسها يستلزم إجراء مقارنتين عند التحقق من المساواة مع الصفر. يمكن أن يؤدي طرح المتمم الأحادي أيضًا إلى استعارة غير مباشرة (موصوفة أدناه). يمكن القول إن هذا يجعل منطق الجمع والطرح أكثر تعقيدًا أو أنه يجعله أبسط، حيث يتطلب الطرح ببساطة عكس بتات المعامل الثاني عند تمريره إلى الجامع. تستخدم أجهزة الكمبيوتر PDP -1 و CDC 160 series و CDC 3000 series و CDC 6000 series و UNIVAC 1100 series و LINC تمثيل المتمم الواحدي.

يُعدّ نظام المتمم الثنائي الأسهل تطبيقًا في الأجهزة، ولعلّ هذا هو السبب الرئيسي لشعبيته الواسعة. [ 1 ] غالبًا ما كانت معالجات الحواسيب المركزية القديمة تتألف من آلاف الترانزستورات، لذا كان الاستغناء عن عدد كبير منها بمثابة توفير كبير في التكاليف. تستخدم الحواسيب المركزية مثل IBM System/360 وسلسلة GE -600 [ 2 ] و PDP -6 و PDP-10 نظام المتمم الثنائي، وكذلك الحواسيب الصغيرة مثل PDP-5 و PDP-8 و PDP-11 وأجهزة VAX . كما اختار مصممو وحدات المعالجة المركزية الأولى القائمة على الدوائر المتكاملة ( مثل Intel 8080 ) استخدام حسابات المتمم الثنائي. مع تقدم تكنولوجيا الدوائر المتكاملة، تم اعتماد تقنية المكمل الثنائي في جميع المعالجات تقريبًا، بما في ذلك x86 ، [ 3 ] m68k ، Power ISA ، [ 4 ] MIPS ، SPARC ، ARM ، Itanium ، PA-RISC ، و DEC Alpha .

الإشارة والمقدار

إشارة-مقدار ثمانية بت
القيمة الثنائيةتفسير الإشارة والمقدارترجمة غير موقعة
0000000000
0000000111
01111101125125
01111110126126
01111111127127
10000000-0128
10000001-1129
10000010-2130
11111101-125253
11111110-126254
11111111-127255

في تمثيل الإشارة والمقدار ، والذي يُسمى أيضًا تمثيل الإشارة والمقدار أو تمثيل الإشارة والمقدار ، يُمثَّل العدد المُوَقَّع بنمط بتات يُشير إلى إشارة العدد في بت الإشارة (غالبًا ما يكون البت الأكثر أهمية ، ويُضبط على 0 للعدد الموجب و1 للعدد السالب)، ومقدار العدد (أو قيمته المطلقة ) في البتات المتبقية. على سبيل المثال، في بايت مكون من ثمانية بتات ، تُمثِّل سبعة بتات فقط المقدار، والذي يتراوح من 0000000 (0) إلى 1111111 (127). وبالتالي، يُمكن تمثيل الأعداد التي تتراوح من -127 إلى +127 بمجرد إضافة بت الإشارة (البت الثامن). على سبيل المثال، يُشفّر العدد -43 10 في بايت مكون من ثمانية بتات على أنه 1 0101011، بينما يُشفّر العدد 43 10 على أنه 0 0101011. إن استخدام تمثيل الإشارة والمقدار له تبعات متعددة تجعل تنفيذه أكثر تعقيدًا: [ 5 ]

  1. هناك طريقتان لتمثيل الصفر، 00000000 (0) و 10000000 ( −0 ).
  2. تتطلب عمليتا الجمع والطرح سلوكًا مختلفًا اعتمادًا على بت الإشارة، في حين أن المتمم الأحادي يمكنه تجاهل بت الإشارة والقيام بعملية حمل من النهاية إلى النهاية، ويمكن للمتمم الثنائي تجاهل بت الإشارة والاعتماد على سلوك تجاوز السعة.
  3. تتطلب المقارنة أيضًا فحص بت الإشارة، بينما في نظام المتمم الثنائي، يمكن للمرء ببساطة طرح الرقمين، والتحقق مما إذا كانت النتيجة موجبة أم سالبة.
  4. أصغر عدد سالب هو -127، بدلاً من -128 كما هو الحال في نظام المتمم الثنائي.

هذا الأسلوب يُشابه تمامًا الطريقة الشائعة لإظهار الإشارة (بوضع علامة "+" أو "−" بجوار قيمة العدد). بعض الحواسيب الثنائية القديمة (مثل IBM 7090 ) تستخدم هذا التمثيل، ربما بسبب ارتباطه الطبيعي بالاستخدام الشائع. يُعدّ تمثيل الإشارة والقيمة الطريقة الأكثر شيوعًا لتمثيل الجزء الكسري في قيم الفاصلة العائمة .

مكمل الواحدات

مكمل الثمانية بتات
القيمة الثنائيةتفسير مكمل الواحداتترجمة غير موقعة
0000000000
0000000111
01111101125125
01111110126126
01111111127127
10000000-127128
10000001-126129
10000010-125130
11111101-2253
11111110-1254
11111111-0255

في تمثيل المتمم الأحادي ، [ 6 ] يُمثَّل العدد السالب بنمط البتات المقابل لعملية النفي الثنائية (أي "المتمم") للعدد الموجب. وكما هو الحال في تمثيل الإشارة والمقدار، فإن للمتمم الأحادي تمثيلين للصفر: 00000000 (+0) و 11111111 ( -0 ). [ 7 ]

على سبيل المثال، يصبح تمثيل العدد 00101011 (43 10 ) بنظام المتمم الأحادي هو 11010100 (−43 10 ). ويُمثَّل نطاق الأعداد الموقعة باستخدام نظام المتمم الأحادي بالقيم من −(2 N −1 − 1) إلى (2 N −1 − 1) بالإضافة إلى ±0. أما البايت التقليدي ذو الثمانية بتات فيتراوح بين −127 10 و+127 10، حيث يُمثِّل الصفر إما 00000000 (+0) أو 11111111 (−0).

لجمع عددين ممثلين في هذا النظام، يتم إجراء عملية جمع ثنائية تقليدية، ولكن يلزم بعد ذلك إجراء عملية ترحيل عكسية : أي إضافة أي ناتج ترحيل إلى المجموع الناتج. [ 8 ] لفهم سبب ضرورة ذلك، انظر المثال التالي الذي يوضح حالة جمع -1 ( 11111110 ) مع +2 ( 00000010 ):

 النظام العشري الثنائي 11111110 -1 + 00000010 +2 ─────────── ── 1 00000000 0 ← إجابة خاطئة 1 +1 ← إضافة الحمل ─────────── ── 00000001 1 ← الإجابة الصحيحة 

في المثال السابق، تعطي عملية الجمع الثنائي الأولى النتيجة 00000000 ، وهي نتيجة خاطئة. لا تظهر النتيجة الصحيحة ( 00000001 ) إلا بعد إضافة عنصر الحمل.

ملاحظة حول المصطلحات: يُشار إلى هذا النظام باسم "المتمم الأحادي" لأن نفي القيمة الموجبة x (المُمثلة بـ NOT الثنائي لـ x ) يُمكن تكوينه أيضًا بطرح x من تمثيل المتمم الأحادي للصفر، وهو عبارة عن سلسلة طويلة من الآحاد (-0). من ناحية أخرى، يُكوّن حساب المتمم الثنائي نفي x بطرح x من قوة واحدة كبيرة للعدد اثنين تُطابق +0 . [ 9 ] لذلك، يختلف تمثيلا المتمم الأحادي والمتمم الثنائي لنفس القيمة السالبة بمقدار واحد.

لاحظ أنه يمكن الحصول على تمثيل المتمم الأحادي لعدد سالب من تمثيل الإشارة والمقدار ببساطة عن طريق عكس بتات المقدار (عكس جميع البتات بعد البت الأول). على سبيل المثال، يمكن تمثيل العدد العشري -125، الذي يُمثله تمثيل الإشارة والمقدار 11111101، بصيغة المتمم الأحادي على النحو التالي: 10000010 .

متمم الاثنين

المتمم الثنائي ذو الثمانية بت
القيمة الثنائيةتفسير نظام المتمم الثنائيترجمة غير موقعة
0000000000
0000000111
01111110126126
01111111127127
10000000-128128
10000001-127129
10000010-126130
11111110-2254
11111111-1255

في تمثيل المتمم الثنائي ، يُمثَّل العدد السالب بنمط البتات المقابل لعملية النفي المنطقي (أي "المتمم") للعدد الموجب مضافًا إليه واحد، أي المتمم الأحادي مضافًا إليه واحد. وهذا يُجنِّبنا مشكلة تعدد تمثيلات الصفر والحاجة إلى عملية الحمل في نهاية كل دورة كما في تمثيل المتمم الأحادي. ويمكن اعتبار هذا أيضًا بمثابة البت الأكثر أهمية الذي يُمثِّل معكوس قيمته في عدد صحيح غير مُوَقَّع؛ ففي بايت غير مُوَقَّع مكون من 8 بتات، يُمثِّل البت الأكثر أهمية خانة 128، بينما في تمثيل المتمم الثنائي يُمثِّل هذا البت -128.

في نظام المتمم الثنائي، يوجد صفر واحد فقط، يُرمز له بـ 00000000. يتم عكس إشارة أي عدد (سواء كان سالبًا أو موجبًا) عن طريق عكس جميع البتات ثم إضافة واحد إلى النتيجة. [ 10 ] وهذا يعكس في الواقع بنية الحلقة لجميع الأعداد الصحيحة بتردد 2^ N .Z/2شمالZ{\displaystyle \mathbb {Z} /2^{N}\mathbb {Z} }إن جمع عددين صحيحين بنظام المتمم الثنائي يُشابه جمع عددين غير مُوَقَّعين (باستثناء التحقق من تجاوز السعة ، إن وُجد)؛ وينطبق الأمر نفسه على الطرح، وحتى على أقل N بتًا أهميةً في ناتج الضرب. على سبيل المثال، يُعطي جمع 127 و-128 بنظام المتمم الثنائي نفس نمط البتات الثنائية الناتج عن جمع 127 و128 كأعداد غير مُوَقَّعة، كما هو موضح في جدول المتمم الثنائي ذي 8 بتات.

هناك طريقة أسهل للحصول على نفي عدد ما في نظام المتمم الثنائي وهي كالتالي:

المثال 1المثال 2
1. ابدأ من اليمين، وابحث عن الرقم "1" الأول0010100 100101 1 00
2. اعكس جميع البتات الموجودة على يسار الرقم "1".1101011 111010 100

الطريقة الثانية:

  1. اعكس جميع البتات في العدد. هذا يعطي نفس نتيجة الطرح من سالب واحد.
  2. أضف واحداً

مثال: بالنسبة لـ +2، وهو 00000010 في النظام الثنائي (الحرف ~ هو عامل النفي الثنائي C ، لذا فإن ~X تعني "عكس جميع البتات في X"):

  1. ~ 0000001011111101
  2. 11111101 + 1 → 11111110 (-2 في نظام المتمم الثنائي)

إزاحة ثنائية

ثمانية بت زائدة -128
القيمة الثنائيةتفسير الزيادة-128ترجمة غير موقعة
00000000-1280
00000001-1271
01111111-1127
100000000128
100000011129
11111111127255

في التمثيل الثنائي المُزاح ، والذي يُسمى أيضًا التمثيل الزائد- K أو التمثيل المُتحيز ، يُمثَّل العدد المُوَقَّع بنمط البتات المُطابق للعدد غير المُوَقَّع مضافًا إليه K ، حيث K هي قيمة التحيز أو الإزاحة . وبالتالي، يُمثَّل الصفر بـ K ، ويُمثَّل -K بنمط بتات جميعها أصفار. يُمكن اعتبار هذا تعديلًا وتعميمًا طفيفًا للتمثيل الثنائي المُكمِّل المذكور سابقًا، والذي يُعد عمليًا التمثيل الزائد- (2 N -1 ) مع بتة معكوسة الأكثر أهمية .

تُستخدم التمثيلات المتحيزة حاليًا بشكل أساسي لأس الأعداد العشرية . يُعرّف معيار IEEE 754 للأعداد العشرية حقل الأس لعدد أحادي الدقة (32 بت) على أنه حقل ذو 8 بتات زائد 127. أما حقل الأس لعدد مزدوج الدقة (64 بت) فهو حقل ذو 11 بتات زائد 1023 ؛ انظر تحيز الأس . كما استُخدم أيضًا للأعداد العشرية المشفرة ثنائيًا على أنها زائد 3 .

الأساس -2

في التمثيل ذي الأساس -2 ، يتم تمثيل العدد الموقّع باستخدام نظام عددي أساسه -2.

نظام ثماني البتات أساسه -2
القيمة الثنائيةتفسير الأساس -2ترجمة غير موقعة
0000000000
0000000111
0111111143127
10000000-128128
10000001-127129
11111111-85255

في أنظمة العد الثنائي التقليدية، الأساس هو 2؛ لذا يُمثل البت الأيمن 2⁰ ، والبت الذي يليه 2⁹ ، والبت الذي يليه ، وهكذا. مع ذلك، يُمكن أيضًا استخدام نظام عد ثنائي أساسه -2. يُمثل البت الأيمن (-2) = +1 ، والبت الذي يليه (-2) = -2 ، والبت الذي يليه (-2) ² = +4، وهكذا، مع تبديل الإشارة. تُوضح الجداول المقارنة أدناه الأعداد التي يُمكن تمثيلها بأربعة بتات.

نطاق الأرقام التي يمكن تمثيلها غير متناظر. فإذا كانت الكلمة تحتوي على عدد زوجي من البتات، فإن قيمة أكبر عدد سالب يمكن تمثيله تكون ضعف قيمة أكبر عدد موجب يمكن تمثيله، والعكس صحيح إذا كانت الكلمة تحتوي على عدد فردي من البتات.

جدول المقارنة

يوضح الجدول التالي الأعداد الصحيحة الموجبة والسالبة التي يمكن تمثيلها باستخدام أربعة بتات.

تمثيلات الأعداد الصحيحة ذات الأربع بتات
عشريغير موقعالإشارة والمقدارمكمل الواحداتمتمم الاثنينالزيادة-8 (متحيزة)الأساس -2
16    غير متوفرغير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
15    1111غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
14    1110غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
13    1101غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
12    1100غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
11    1011غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
10    1010غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
9    1001غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
8    1000غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر
7    01110111011101111111غير متوفر
6    01100110011001101110غير متوفر
5    010101010101010111010101
4    010001000100010011000100
3    001100110011001110110111
2    001000100010001010100110
1    ٠٠٠١٠٠٠١٠٠٠١٠٠٠١1001٠٠٠١
0    000000000000000010000000
-0    10001111
-1    غير متوفر10011110111101110011
-2    غير متوفر10101101111001100010
-3    غير متوفر10111100110101011101
-4    غير متوفر11001011110001001100
-5    غير متوفر11011010101100111111
-6    غير متوفر11101001101000101110
-7    غير متوفر111110001001٠٠٠١1001
-8    غير متوفرغير متوفرغير متوفر100000001000
-9    غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر1011
-10    غير متوفرغير متوفرغير متوفرغير متوفرغير متوفر1010
-11    غير متوفرغير متوفرغير متوفرغير متوفرغير متوفرغير متوفر

نفس الجدول، كما يُنظر إليه من منظور "بالنظر إلى هذه البتات الثنائية، ما هو الرقم كما يفسره نظام التمثيل":

ثنائيغير موقعالإشارة والمقدارمكمل الواحداتمتمم الاثنينفائض-8الأساس -2
00000000-80
٠٠٠١1111-71
00102222-6-2
00113333-5-1
01004444-44
01015555-35
01106666-22
01117777-13
10008-0-7-80-8
10019-1-6-71-7
101010-2-5-62-10
101111-3-4-53-9
110012-4-3-44-4
110113-5-2-35-3
111014-6-1-26-6
111115-7-0-17-5

أنظمة أخرى

يُعدّ ترميز "الزجزاج" في بروتوكول بافرز من جوجل نظامًا مشابهًا لترميز الإشارة والمقدار، ولكنه يستخدم البت الأقل أهمية لتمثيل الإشارة، وله تمثيل واحد فقط هو الصفر. وهذا يسمح باستخدام ترميز كمية متغير الطول، المُصمم للأعداد الصحيحة غير السالبة (غير المُوقّعة)، بكفاءة مع الأعداد الصحيحة المُوقّعة. [ 11 ]

تُستخدم طريقة مشابهة في معايير ضغط الفيديو المتقدمة (H.264) وعالية الكفاءة (H.265) لتوسيع ترميز غولومب الأسي ليشمل الأعداد السالبة. في هذا التوسيع، تُعتبر البتة الأقل أهمية بمثابة بتة إشارة تقريبًا؛ فالصفر له نفس البتة الأقل أهمية (0) لجميع الأعداد السالبة. ينتج عن هذا الاختيار أن أكبر عدد موجب قابل للتمثيل يكون أعلى بواحد من أكبر عدد سالب، على عكس ترميز المتمم الثنائي أو ترميز بروتوكول بافرز المتعرج.

ثمة نهج آخر يتمثل في إعطاء كل رقم إشارة، مما ينتج عنه تمثيل الأرقام الموقعة . على سبيل المثال، في عام 1726، دعا جون كولسون إلى اختزال التعبيرات إلى "أعداد صغيرة"، وهي الأرقام 1 و2 و3 و4 و5. وفي عام 1840، أعرب أوغسطين كوشي أيضًا عن تفضيله لهذه الأعداد العشرية المعدلة لتقليل الأخطاء في الحساب.

انظر أيضاً

مراجع

  1. تشو، هونسو؛ محمد، ك.؛ روي، ك. (فبراير 2003). "مضاعف مشاركة حساب المتمم الثنائي وتطبيقاته على معادلات التضمين التفاضلية عالية الأداء" . معاملات IEEE في معالجة الإشارات . 51 (2): 458-469 . Bibcode : 2003ITSP...51..458C . doi : 10.1109/TSP.2002.806984 .
  2. دليل برمجة GE-625 / 635. جنرال إلكتريك . يناير 1966. تم الاطلاع عليه في 15 أغسطس 2013 .
  3. دليل مطوري البرامج لبنيتي Intel 64 و IA-32 (ملف PDF) . Intel . القسم 4.2.1 . تم الاطلاع عليه بتاريخ 6 أغسطس 2013 .
  4. Power ISA الإصدار 2.07 (ملف PDF) . Power.org . القسم 1.4 . تم الاطلاع عليه في 2 نوفمبر 2023 .،
  5. بيكون، جيسون و. (2010-2011). "ملاحظات محاضرات علوم الحاسوب 315" . مؤرشف من الأصل في 14 فبراير 2020. تم الاطلاع عليه في 21 فبراير 2020 .
  6. ↑ براءة الاختراع الأمريكية رقم 4484301 ، "مضاعف مصفوفة يعمل بصيغة المتمم الأحادي"، صدرت بتاريخ 10 مارس 1981 
  7. ↑ براءة الاختراع الأمريكية رقم 6760440 ، "مُجمِّع تشفير مكمل الواحد"، الصادرة بتاريخ 11 ديسمبر 1999 
  8. شيدليتسكي، جون ج. (1977). "تعليق على السلوك التسلسلي وغير المحدد لجامع الحمل الدائري". معاملات IEEE في الحوسبة . 26 (3): 271-272 . doi : 10.1109/TC.1977.1674817 . S2CID 14661474 . 
  9. كنوت، دونالد . "الفصل 4.1". فن برمجة الحاسوب . المجلد 2: الخوارزميات شبه العددية. 
  10. توماس فينلي (أبريل 2000). "المكمل الثنائي" . جامعة كورنيل . تم الاطلاع عليه بتاريخ 15 سبتمبر 2015 .
  11. مخازن البروتوكول: الأعداد الصحيحة الموقعة
  • إيفان فلوريس، منطق الحساب الحاسوبي ، برنتيس هول (1963)
  • إسرائيل كورين، خوارزميات الحساب الحاسوبي ، أيه كيه بيترز (2002)، ISBN 1-56881-160-8