تقريب المنتصف في NumPy قد يخالف توقع أن كل عدد ينتهي بنصف يرتفع دائما. نحدد قاعدة التقريب وعدد المنازل أولا، ثم نتبع أمثلة تمثل المنتصف بالضبط. يفيد ذلك عند مراجعة أعداد مشتقة من بيانات نموذج، قبل تفسير فرق النتيجة على أنه خطأ حساب.
الخلاصة السريعة
لا؛ عندما تقع القيمة في المنتصف بالضبط، تقرب NumPy إلى أقرب قيمة زوجية، ومع decimals=0 قد يكون الجار الأصغر أو الأكبر. [1]
- توثق NumPy تقريب المنتصف الدقيق إلى القيمة الزوجية الأقرب؛ نثبت decimals=0 في المثال، ولا نعمم القاعدة على كل واجهة تقريب. [1]
- 6.5 في منتصف 6 و 7 فيختار 6 ، بينما 7.5 في منتصف 7 و 8 فيختار 8. التعادل هو الشرط الحاسم، لا اتجاه الصعود وحده.
- −6.5 في منتصف−7 و−6 فيختار−6. أمثلة النصف المختارة قابلة للتمثيل الثنائي الدقيق؛ ليست كل كتابة عشرية دليلا على منتصف مخزن بالضبط.
- حساب العائم في round قد يكون غير دقيق لبعض القيم، خصوصا مع التحجيم العشري. [1] حدد الغرض من التقريب، ولا تجعل العرض العشري بديلا عن فحص القيمة المخزنة؛ لم نشغل المكتبة.
ما قاعدة الحسم عند تساوي المسافتين؟
تذكر وثائق NumPy أن القيم الواقعة بالضبط في منتصف القيم المقربة تذهب إلى القيمة الزوجية الأقرب. [1]
نقرب هنا إلى أقرب عدد صحيح، باختيار decimals=0. الرقم الزوجي يقبل القسمة على 2 دون باق؛ لا يعني «الرقم الثاني الذي ننظر إليه» أو «الجار الأعلى دائما». نحسم التعادل بين جارين متساويي المسافة.
قد يكون شخص قد تعلم قاعدة أخرى لرفع النصف. لا نعدل تعريف المكتبة كي يطابق ذلك التوقع، ولا نسمي كل قواعد التقريب متساوية لمجرد أنها تتفق على عدد بعيد عن المنتصف.
كيف تختلف 6.5 و 7.5 ؟
نختار 6.5 ، وهو يبعد نصفا عن 6 ونصفا عن 7. الجار الزوجي 6 ، لذلك تختاره القاعدة. ونختار 7.5 ، وهو يبعد نصفا عن 7 ونصفا عن 8 ؛ الجار الزوجي 8 ، فيكون الاختيار 8.
إذن نفس الجزء الكسري 0.5 لم يفرض الاتجاه نفسه. في المثال الأول انتقلنا إلى العدد الأقل، وفي الثاني إلى الأكبر. لا نحتاج إلى افتراض أن أحد الرقمين رديء أو أن نموذجًا أخطأ؛ الاختلاف نتيجة قاعدة معلنة.
هذه أمثلة حسابية مستقلة، وليست مخرجات دالة جربناها. نكتب الأزواج المتجاورة والمسافتين بحيث يمكن للقارئ فحص سبب كل نتيجة، دون الاكتفاء بحفظ أن النصف يرتفع أو ينخفض.
هل تتغير الفكرة مع عدد سالب؟
نختار−6.5. جاره الأقل−7 وجاره الأكبر−6 ، وبعده عن كل منهما 0.5. الجار الزوجي−6 ، لذلك نختاره. لا نأخذ القيمة المطلقة ثم نطبق قاعدة مختلفة ونفترض أن الإشارة لا تؤثر في ترتيب الجيران.
الأمثلة الثلاثة تستعمل أنصافا قابلة للتمثيل الثنائي الدقيق. ذكر هذا الشرط يمنع نقل استنتاج المنتصف مباشرة إلى كل كسر مكتوب في ملف عشري؛ نحتاج معرفة القيمة التي وصلت فعلا للحساب.
| القيمة المؤلفة | الجاران | الجار الزوجي المختار |
|---|---|---|
| 6.5 | 6 و 7 | 6 |
| 7.5 | 7 و 8 | 8 |
| سالب 6.5 | سالب 7 وسالب 6 | سالب 6 |
هل يساوي التقريب عرضا بعدد من المنازل؟
تنبه وثائق round إلى أن خوارزمية العائم قد تعطي تقريبًا غير دقيق، مع أخطاء في تمثيل الكسور والتحجيم العشري. [1]
لم نستخدم في مثالنا منازل موجبة أو عددا كبيرا يحتاج تحجيما بقوى 10. لذلك لا نقدم الجدول ضمانا لنتيجة كل كسر أو كل إعداد. كما لا نستنتج من القاعدة زوال الانحياز في كل مجموعة بيانات أو ملاءمتها لحساب مالي.
نقترح أن يكتب تقرير التحويل هل تغيرت القيمة الحسابية أم اقتصر المطلوب على طريقة عرضها، وما الدالة وعدد المنازل والقاعدة المطلوبة. لم ننفذ NumPy أو نقس أثر التقريب في نموذج؛ الذي راجعناه هو حسم ثلاثة تعادلات دقيقة ضمن الإعداد المعلن.
المصادر ومتابعة القراءة
- NumPy: round (يفتح في نافذة جديدة)numpy.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
