"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفاجئ التقريب العائم بنتائج متساوية؟

لماذا يفاجئ التقريب العائم بنتائج متساوية؟

تم النشر بتاريخ 2024-11-04
تصفح:438

Why Does Float Rounding Surprise with Even Results?

معضلة تقريب نصف تعويم

هل تواجه غرابة في وظيفة round ()؟ لاحظ السلوك التالي:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))

قد تتوقع أن يتم تقريب القيم العائمة باستمرار، إلا أنها تقرب بشكل مدهش إلى أقرب رقم زوجي.

السبب وراء السلوك

توضح الوثائق الخاصة بالأنواع الرقمية هذا السلوك الغريب من خلال العبارة "round(x[, n]) x تقريبًا إلى أرقام n، وتقريب النصف إلى حتى." يُعرف هذا بتقريب المصرفيين. بدلاً من التقريب المستمر لأعلى أو لأسفل، الأمر الذي قد يؤدي إلى تضخيم أخطاء التقريب، فإن التقريب المصرفي يعوض عن طريق استهداف أقرب رقم زوجي.

حل للتقريب المتحكم فيه

للتعامل مع التقريب بدقة ، الاستفادة من الوحدة العشرية. تزودك هذه الوحدة بخيارات لتحديد استراتيجيات تقريب محددة. على سبيل المثال، للتقريب من النصف:

>>> from decimal import localcontext, Decimal, ROUND_HALF_UP
>>> with localcontext() as ctx:
...     ctx.rounding = ROUND_HALF_UP
...     for i in range(1, 15, 2):
...         n = Decimal(i) / 2
...         print(n, '=>', n.to_integral_value())
...
0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
بيان الافراج أعيد طبع هذه المقالة على: 1729151236 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3