الشكوك الرياضية في بيثون

مرحبا بالجميع! غالبًا ما نستخدم الأرقام المألوفة بلغات البرمجة المفضلة لدينا. المعتاد هو 1 ، -1.5 ، بي أو حتى معقدة. لكن NaN ، + Inf ، -Inf يُستخدم من قبلنا كثيرًا.

ملاحظة:

في المقالة ، استخدم الدالات الأولية لإصدار Python 3.6.8 ، لكن الكثير سيكون ذا صلة باللغات الأخرى ، على سبيل المثال ، لـ JS.

هناك الكثير من المواقف غير المؤكدة في الرياضيات. على سبيل المثال ، هذا قسمة على 0.
الكتابة في وحدة التحكم

1/0 

سوف تحصل على خطأ ZeroDivisionError. المتوقع ، أنت تقول؟ نعم. لنجرب مثالاً آخر:

 0**0 

كما تعلم ، 0 إلى قوة 0 هو عدم اليقين الرياضية الكلاسيكية.
ومع ذلك ، يقول بيثون هذا هو 1. السؤال الذي يطرح نفسه معقول:

صورة

لماذا لا يُسمح لنا بـ "إطلاق النار في القدم" مقسومًا على 0 ، لكنهم يبلغون عن نتيجة خاطئة بمثل هذا العمل غير المحدد؟

ربما يكون شخص ما غاضبًا الآن ويصرخ بأن الإجابة بسيطة: IEEE 754. وإذا لم أكن مخطئًا ، فقد اتفقنا بمساعدته على أن أي عدد في الدرجة 0 هو 1.

هذا هو المكان الذي تبدأ فيه المتعة. يدعم JavaScript أيضًا IEEE (0.1 + 0.2! = 0.3) ، ولكن 1/0 فيه هو ما لا نهاية ، وليس القسمة على 0 خطأ.

نتيجة لذلك ، لدينا (جميع الأمثلة على الثعبان):

1. الأخطاء الناتجة عن الإجراءات غير الصحيحة

الأمثلة على ذلك:

 1/0 # ZeroDivisionError log(0) #ValueError 

2. إرجاع قيم غير صحيحة

مثال:

 0**0 #1 1**inf #1.0 

3. إرجاع القيم الخاصة:

+ -Inf ، نان

مثال:

 inf=float('inf') inf-inf #nan 

في رأيي هذا مربك.

اليوم فقط ، لاحظت وجود سلوك PHP مثير للاهتمام:

 var_dump(mt_rand(INF,INF)); //  INF  INF - NULL?? //        false. 

أنا قاطع ضد 2 خيارات وربما دعم 1.

لأنه ، كما يوضح المثال PHP ، تحتاج إلى استخدام الوقود النووي المشع والحذر. ما رايك

Source: https://habr.com/ru/post/ar454352/


All Articles