قد تستخدم spacing لبناء سماحية عددية، فتفترض أن نتيجتها مسافة موجبة إلى أقرب جار. لكن تجربة تخص العدد −2 تكشف مشكلتين: الإشارة سالبة، والجار نحو الصفر أقرب من الجار الذي تحدده هذه الخطوة. لذلك نميز اتجاه الانتقال عن مقدار الفاصل.
ما الجار المقصود؟
تصف وثائق spacing العلاقة بين القيمة والقيمة المجاورة التي تنتج من إضافة الخطوة. لكن كلمة «مسافة» قد تدفع القارئ إلى حذف الإشارة أو افتراض اختيار أقصر الفاصلين. الأفضل تحديد السؤال أولًا: هل نريد خطوة هذه الدالة، أم الانتقال في اتجاه معين؟ [1]
تستقبل nextafter قيمة انطلاق وقيمة تحدد الاتجاه، وتعيد العدد العائم التالي نحو ذلك الهدف. استخدمنا هدفًا يساوي صفرًا للجار الداخلي، وهدفًا لا نهائيًا يحمل إشارة المدخل للجار الأبعد عن الصفر. الأهداف ليست مدخلات spacing في التجربة. [2]
على خط الأعداد، الانتقال يسار −2 يعطي فرقًا سالبًا، أما الانتقال نحو الصفر فيعطي فرقًا موجبًا. هذا وصف لاتجاه الطرح في مثالنا؛ المقدار المطلق يجيب عن سؤال آخر.
لماذا يختلف الفاصل عند اثنين؟
يضم تمثيل binary64 خانة إشارة، و11 خانة للأس، و52 خانة للكسر؛ وللقيم الطبيعية دقة مؤثرة من 53 خانة ثنائية. لذلك تتغير خطوة التمثيل عند حدود قوى اثنين، ولا يلزم تساوي الفاصلين على جانبي الحد. [4]
في الملف المثبت للإصدار 2.3.5، تقرأ دالة spacing الخطوة بوصفها الفرق بين ناتج المساعد _next عند الوسيط 1 والمدخل. وداخل جسم المساعد الخاص بـ double، يزيد هذا المسار كلمة التمثيل بما ينتج جارًا أكبر مقدارًا للمدخلات المنتهية غير الصفرية التي اخترناها. [3]
قرأنا جسم ذلك المساعد وقالب spacing كاملين، ولم نثبت تطابق الملف مع الشيفرة الثنائية المثبتة، أو نفحص جميع مساعدات الوحدة. التفسير مرتبط بهذه القراءة المحددة، أما الأرقام اللاحقة فمن تنفيذ مستقل محفوظ في بيئتنا. [3]
سالب اثنين، ثم ثلاثة للمقارنة
أنشأنا مصفوفة float64 بالقيم [−2، 2، −3، 3]. عند −2 كانت الخطوة −4.440892098500626e−16، أي −2^−51. الجار الخارجي −2.0000000000000004، والجار نحو الصفر −1.9999999999999998. مقدار الفاصل الداخلي 2^−52؛ لذا نسبة الخارجي إلى الداخلي تساوي 2.
عند +2 انعكست إشارة spacing إلى الموجب، وبقيت نسبة المقدارين 2. أخذ القيمة المطلقة يزيل الإشارة فقط، ولا يحول الخطوة الخارجية إلى أصغر الفاصلين في هذين المثالين.
أما −3 و+3 فأعطيا مقدارًا يساوي 2^−51 في الجهتين، مع بقاء إشارة spacing موافقة لإشارة المدخل. النسبة هنا 1. المقارنة تمنع تعميم اختلاف المقدارين من حد اثنين على كل عدد طبيعي ممثل.

حدود التحقق قبل اختيار السماحية
وسعنا التجربة إلى 17 متجهًا مختلفًا؛ لكل أس صحيح k من −8 إلى 8 استخدمنا [−2^k، 2^k، −1.5×2^k، 1.5×2^k]. نفذنا 17 استدعاء spacing و34 استدعاء nextafter مساعدًا، وحفظنا 68 قيمة للأولى و136 للثانية، مع ثبات بايتات المدخلات.
قارن المرجع المستقل الجيران عبر كلمة binary64، وحسب الفروق بكسور دقيقة، دون استخدام spacing أو nextafter مرجعًا لنفسهما. كل القيم المدخلة طبيعية ومنتهية وغير صفرية؛ ولم تشمل التجربة الأعداد تحت الطبيعية، أو حدود الفيض، أو الأنواع والأبعاد الأخرى، أو out وwhere.
إذا كان المطلوب جارًا نحو جهة محددة فاختيار الهدف جزء من السؤال. وإذا كان المطلوب سماحية موجبة، فحدد قاعدة استخدامها ثم تحقق من مقدارها في المجال المعني؛ نتائج هذه الأمثلة لا تمنح قاعدة عامة لأصغر مسافة ممكنة أو لدقة كل عملية حسابية.
| المدخل | spacing | مقدار الفاصل نحو الصفر | نسبة الخارجي إلى الداخلي |
|---|---|---|---|
| −2 | −2^−51 | 2^−52 | 2 |
| +2 | +2^−51 | 2^−52 | 2 |
| −3 | −2^−51 | 2^−51 | 1 |
| +3 | +2^−51 | 2^−51 | 1 |
للتوسع: تقريب إضافة واحد في binary32.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
