رقم الحماية

في التحليل العددي ، يمكن استخدام رقم حماية واحد أو أكثر لتقليل مقدار خطأ التقريب .

مثال

لنفترض أن النتيجة النهائية لحساب طويل ومتعدد الخطوات يمكن تقريبها بأمان إلى N منزلة عشرية. أي أن خطأ التقريب الناتج عن هذا التقريب الأخير لا يُسهم إلا بنسبة ضئيلة في عدم اليقين الكلي.

مع ذلك، من المرجح أن تقريب الخطوات الوسيطة في الحساب إلى نفس عدد الأرقام غير آمن. انتبه إلى أن أخطاء التقريب قد تتراكم. إذا استُخدم M منزلة عشرية في الحساب الوسيط، نقول إن هناك M-N رقمًا احتياطيًا.

في مجال الحوسبة

تُستخدم أرقام الحماية أيضًا في عمليات الفاصلة العائمة في معظم أنظمة الكمبيوتر.

على سبيل المثال، لنأخذ عملية الطرح21×0.1002-20×0.1112{\displaystyle 2^{1}\times 0.100_{2}-2^{0}\times 0.111_{2}}هنا، يشير ترميز الضرب إلى تمثيل ثنائي ذي فاصلة عائمة، حيث يُعطى أس التمثيل كقوة للعدد اثنين ، ويُعطى الجزء الكسري بثلاث بتات بعد الفاصلة الثنائية. لحساب الطرح، من الضروري تغيير صيغ هذه الأعداد بحيث يكون لها نفس الأس، بحيث تتطابق الفواصل الثنائية للأعداد الناتجة عند توسيع ترميز الضرب. يتم ذلك عن طريق إزاحة المعامل الثاني إلى موضعه، كما يلي:21×0.01112{\displaystyle 2^{1}\times 0.0111_{2}}يُضيف هذا الرقم رقمًا رابعًا بعد الفاصلة الثنائية. وهذا يستدعي إضافة رقم إضافي إلى المعامل الأول - رقم حماية - ليصبح الطرح على الصورة التالية:21×0.10002-21×0.01112{\displaystyle 2^{1}\times 0.1000_{2}-2^{1}\times 0.0111_{2}}.

ينتج عن إجراء هذه العملية21×0.00012{\displaystyle 2^{1}\times 0.0001_{2}}أو2-2×0.1002{\displaystyle 2^{-2}\times 0.100_{2}}.

بدون استخدام رقم حماية، ستُجرى عملية الطرح بدقة ثلاثة بتات فقط، كما21×0.1002-21×0.0112{\displaystyle 2^{1}\times 0.100_{2}-2^{1}\times 0.011_{2}}، مما يؤدي إلى21×0.0012={\displaystyle 2^{1}\times 0.001_{2}=}أو2-1×0.1002{\displaystyle 2^{-1}\times 0.100_{2}}، ضعف حجم النتيجة الصحيحة. وبالتالي، في هذا المثال، أدى استخدام رقم حماية إلى نتيجة أكثر دقة.

يوضح كود C التالي مثالاً على الخطأ الناتج عن تقريب الأرقام العشرية .

int main (){ double a ; int i ;a = 0.2 ; a += 0.1 ; a -= 0.3 ;for ( i = 0 ; a < 1.0 ; i ++ ) a += a ;printf ( "i=%d, a=%f \n " , i , a );return 0 ; }

يبدو أن البرنامج لا ينبغي أن يتوقف. ومع ذلك، فإن الناتج هو:

i=54، a=1.000000

مثال آخر هو:

خذ رقمين:

2.56×100{\displaystyle 2.56\times 10^{0}}و2.34×102{\displaystyle 2.34\times 10^{2}}

نرفع العدد الأول إلى نفس قوة10{\displaystyle 10}كالثاني:

0.0256×102{\displaystyle 0.0256\times 10^{2}}

مجموع العددين هو:

0.0256*10^2 2.3400*10^2 + ____________ 2.3656*10^2 

بعد إضافة الحشو إلى الرقم الثاني (أي،2.34×102{\displaystyle 2.34\times 10^{2}}) مع اثنين0{\displaystyle 0}الجزء الذي يلي4{\displaystyle 4}يمثل الرقم 1 رقم الحماية، والرقم الذي يليه هو رقم التقريب. والنتيجة بعد التقريب هي2.37{\displaystyle 2.37}على عكس2.36{\displaystyle 2.36}، بدون البتات الإضافية (البتات الواقية والدائرية)، أي بالنظر فقط0.02+2.34=2.36{\displaystyle 0.02+2.34=2.36}إذن، الخطأ هو0.01{\displaystyle 0.01}.

انظر أيضاً

مراجع

  • فورمان إس. أكتون . الطرق العددية التي تعمل ، الجمعية الرياضية الأمريكية (أغسطس 1997).
  • Higham, Nicholas J. Accuracy and Stability of Numical Algorithms , Washington DC: Society for Industrial & Applied Mathematics, 2002.