language agnostic - مالانهاية - لماذا القسمة على صفر في معيار IEEE754 ينتج عنها قيمة لانهائية؟



القسمه على الصفر والواحد (3)

أنا فقط فضولي ، لماذا في IEEE-754 أي رقم غير صفري مقسوماً على صفر ينتج عنه قيمة لانهائية؟ إنه هراء من المنظور الرياضي. لذلك أعتقد أن النتيجة الصحيحة لهذه العملية هي NaN.

لا يتم تعريف الدالة f (x) = 1 / x عندما يكون x = 0 ، إذا كان x هو رقم حقيقي. على سبيل المثال ، لم يتم تعريف الدالة sqrt لأي رقم سالب و sqrt (-1.0f) إذا كان IEEE-754 ينتج قيمة NaN . لكن 1.0f / 0 هو Inf .

ولكن لسبب ما ، ليس هذا هو الحال في IEEE-754 . يجب أن يكون هناك سبب لذلك ، ربما بعض أسباب التحسين أو التوافق.

لذلك ما هي النقطة؟

https://ffff65535.com


إنه هراء من المنظور الرياضي.

نعم فعلا. رقم النوع من.

الشيء هو: أرقام الفاصلة العائمة تقريبية. تريد استخدام مجموعة واسعة من الأسس وعدد محدود من الأرقام والحصول على نتائج ليست خاطئة تماما. :)

الفكرة وراء IEEE-754 هي أن كل عملية يمكن أن تؤدي إلى "مصائد" تشير إلى وجود مشاكل محتملة. هم انهم

  • غير قانونية (عملية لا معنى لها مثل sqrt من الرقم السالب)
  • الفائض (كبير جدًا)
  • التدفق السفلي (صغير جدًا)
  • القسمة على صفر (الشيء الذي لا يعجبك)
  • غير دقيق (قد تعطيك هذه العملية نتائج خاطئة لأنك تفقد الدقة)

الآن كثير من الناس مثل العلماء والمهندسين لا يريدون أن يزعجوا كتابة إجراءات الاعتراض. لذا قرر كاهان ، مخترع IEEE-754 ، أن كل عملية يجب أن تُرجع أيضًا قيمة افتراضية معقولة في حالة عدم وجود إجراءات اعتراض.

هم انهم

  • NaN للقيم غير المشروعة
  • وقعت اللانهائي لتجاوز
  • أصفار موقعة لـ Underflow
  • NaN للنتائج غير المحددة (0/0) واللانهاية لـ (x / 0 x! = 0)
  • نتيجة التشغيل العادي ل Inexact

الشيء هو أنه في 99 ٪ من جميع الحالات تنتج الأصفار عن التدفق السفلي ، وبالتالي في 99 ٪ من جميع الأوقات إنفينيتي "صحيحة" حتى لو كانت خاطئة من منظور رياضي.


في الرياضيات ، لا يتم تعريف القسمة على صفر نظرًا لعدم وجود أي علامة على الصفر ، لذلك تكون هناك نتيجتان ممكنتان على حد سواء ، وهما حصريان: اللانهاية السلبية أو اللانهاية الإيجابية (ولكن ليس الاثنين)

في (معظم) الحوسبة ، 0.0 لها علامة. لذلك نحن نعرف الاتجاه الذي نقترب منه ، وما هي علامة اللانهاية. يكون هذا صحيحًا بشكل خاص عندما تمثل 0.0 قيمة غير صفرية صغيرة جدًا بحيث لا يمكن التعبير عنها بواسطة النظام ، كما هو الحال دائمًا.

المرة الوحيدة التي يكون فيها NaN مناسبة هي معرفة ما إذا كان النظام على يقين من أن المقام هو حقًا صفر. ولا يمكن ذلك ما لم تكن هناك طريقة خاصة لتعيين ذلك ، والتي ستضيف النفقات العامة.


ملاحظة : قمت بإعادة كتابة هذا بعد تعليق قيم منCubic.

أعتقد أن الإجابة الصحيحة على هذا يجب أن تأتي من حساب التفاضل والتكامل ومفهوم الحدود. ضع في اعتبارك أن الحد f(x)/g(x) هو x->0 على افتراض أن g(0) == 0 . هناك حالتان عريضتان مثيرتان للاهتمام هنا:

  1. إذا كانت f(0) != 0 ، فإن الحد كـ x->0 هو إما زائد أو ناقص لا نهاية ، أو أنه غير محدد. إذا كانت g(x) تأخذ كلتا العلامتين في الحي x==0 ، فإن الحد غير معرف (لا تتفق الحدود اليمنى واليسرى). إذا كان لدى g(x) علامة واحدة فقط بالقرب من 0 ، فسيتم تحديد الحد ويكون إما موجبًا أو سالبًا. المزيد عن هذا في وقت لاحق.
  2. إذا كانت f(0) == 0 أيضًا ، فيمكن أن يكون الحد هو أي شيء ، بما في ذلك اللانهاية الموجبة أو اللانهاية السلبية أو رقم محدد أو غير محدد.

في الحالة الثانية ، بشكل عام ، لا يمكنك قول أي شيء على الإطلاق. يمكن القول ، في الحالة الثانية NaN هو الحل الوحيد القابل للتطبيق.

الآن في الحالة الأولى ، لماذا تختار علامة معينة عندما يكون ذلك ممكنًا أو قد يكون غير محدد؟ من الناحية العملية ، يمنحك مزيدًا من المرونة في الحالات التي تعرف فيها شيئًا عن علامة المقام ، بتكلفة قليلة نسبيًا في الحالات التي لا تعرفها. قد يكون لديك صيغة ، على سبيل المثال ، حيث تعرف من الناحية التحليلية أن g(x) >= 0 لكل x ، على سبيل المثال ، g(x) = x*x . في هذه الحالة ، يتم تعريف الحد وهو اللانهاية مع علامة تساوي علامة f(0) . قد ترغب في الاستفادة من ذلك كراحة في الكود. في حالات أخرى ، حيث لا تعرف شيئًا عن علامة g ، لا يمكنك عمومًا الاستفادة من ذلك ، لكن التكلفة هنا هي أنك تحتاج فقط إلى فخ بعض الحالات الإضافية - اللانهاية الإيجابية والسلبية - بالإضافة إلى NaN إذا كنت ترغب في الخطأ بالكامل ، تحقق من الكود. هناك بعض الأسعار ، لكنها ليست كبيرة مقارنة بالمرونة المكتسبة في الحالات الأخرى.

لماذا تقلق بشأن الوظائف العامة عندما كان السؤال حول "التقسيم البسيط"؟ أحد الأسباب الشائعة هو أنه إذا كنت تقوم بحساب البسط والمقام الخاص بك من خلال العمليات الحسابية الأخرى ، فإنك تتراكم أخطاء التقريب. يمكن استخراج وجود هذه الأخطاء في صيغة الصيغة العامة الموضحة أعلاه. على سبيل المثال f(x) = x + e ، حيث تمثل x الإجابة الصحيحة من الناحية التحليلية ، تمثل e الخطأ من التقريب ، و f(x) هو رقم الفاصلة العائمة الذي لديك بالفعل على الجهاز عند التنفيذ.





ieee-754