سؤال

في Java ، (الرقم/0) يرمي ArithMeticexception بينما (الرقم/0.0) = اللانهاية. لماذا يحدث هذا؟

هل كانت مفيدة؟

المحلول

لأن IEEE-754 أرقام النقاط العائمة لديها تمثيل للانفصام ، في حين أن الأعداد الصحيحة لا تفعل ذلك.

بمعنى آخر ، كل نمط بت في int يمثل عدد صحيح طبيعي. تكون قيم النقطة العائمة أكثر تعقيدًا مع +/- اللانهاية ، "ليس رقمًا" (NAN) ، والقيم الطبيعية ، والقيم دون الطبيعية ، إلخ.

نصائح أخرى

من هنا

يحدد معيار IEEE Floating-Point ، بدعم من جميع المعالجات الحديثة تقريبًا ، أن كل عملية حسابية عائمة ، بما في ذلك التقسيم بواسطة الصفر ، لها نتيجة محددة جيدًا. الدعم المعياري موقعة الصفر ، وكذلك اللانهاية و NAN (وليس رقم). هناك اثنين من الأصفار ، +0 (صفر إيجابي) و −0 (صفر سلبي) وهذا يزيل أي غموض عند الانقسام. في IEEE 754 الحساب ، يكون A ÷ +0 موجبًا عندما يكون A إيجابيًا ، وسلبيًا عندما يكون A سلبيًا ، و NAN عند A = ± 0. تتغير علامات اللانهاية عند الانقسام على −0 بدلاً من ذلك.

عادةً ما يتم التعامل مع تقسيم عدد صحيح بواسطة الصفر بشكل مختلف عن النقطة العائمة نظرًا لعدم وجود تمثيل عدد صحيح للنتيجة. تقوم بعض المعالجات بإنشاء استثناء عند إجراء محاولة لتقسيم عدد صحيح على الصفر ، على الرغم من أن الآخرين سيستمرون ببساطة وإنشاء نتيجة غير صحيحة للقسمة. تعتمد النتيجة على كيفية تنفيذ الانقسام ، ويمكن أن يكون إما صفرًا ، أو في بعض الأحيان أكبر عدد صحيح ممكن.

كما يمكنك التحقق من JLS التي تقول:

15.17.2 مشغل التقسيم
من ناحية أخرى ، إذا كانت قيمة المقسوم في تقسيم عدد صحيح 0 ، فسيتم إلقاء ArithMeticeSception.

يتم تحديد نتيجة تقسيم النقطة العائمة من خلال تحديد الحساب IEEE: إذا لم تكن النتيجة نان ، فإن علامة النتيجة إيجابية إذا كان لكل من المعاملات نفس العلامة ، سلبية إذا كانت المعاملات لها علامات مختلفة.
تقسيم قيمة محدودة غير صفرية من قبل الصفر يؤدي إلى إنفينيتي موقعة. يتم تحديد العلامة من خلال القاعدة المذكورة أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top