سؤال

وأنا مبتدئا MATLAB. هنا تكمن المشكلة:

>> a = floor(7/2.5)

a =

      2.00

>> b = rem(7,2.5)

b =

      2.00

>> c = floor(b/2)

c =

         0

وينبغي أن يكون ج 1، أليس كذلك؟ لماذا هو 0 ؟؟؟

والأمر مختلف عندما يتم إدخال ب = 2 مباشرة كما يلي:

>> b = 2

b =

      2.00

>> c = floor(b/2)

c =

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

المحلول

في كلمتين: أخطاء اقتطاع

وأنت على حق، وينبغي أن تكون ج 1.0 في الحساب المحدد. ومع ذلك، منذ كنت تستخدم تطفو في حجج عيني، يمكنك الحصول على أجوبة على تعويم. على ما يبدو، ب ليست بالضبط 2، ولكن 2.0، مما يعني أنه هو ضعف قريبة جدا إلى 2. لذلك، ب / 2 يصبح مزدوج 1.0، على ما يبدو في هذه الحالة قيمتها أقل قليلا من واحد، مما يتيح لك 0 كما قيمة عدد صحيح. إذا كنت ترغب في منع هذا، استخدام كل من الأرض وسقف، ومقارنة القيم.

إذا كنت تريد تحويل الإجابة على عدد صحيح، ومجرد استخدام جولة بدلا من الأرض.

نصائح أخرى

إذا قمت بإضافة سطر

d = b-a

وعلى سبيل المثال لديك سترى النتيجة

    d =

 -4.4409e-016

ومعنى مطلب احتساب عدد قريب، ولكن ليس بالضبط، 2 لب. ويأتي هذا الأمر لا بأس به في العمل مع أرقام النقطة العائمة. محاولة

help eps

لمزيد من المعلومات.

ويتم التعامل مع قضايا العددية من هذا النوع أيضا مع في في MATLAB التعليمات

نعم هذا هو مسألة عددية. يجب عليك استخدام مثل هذه الأمور بعناية. إذا كنت تريد الحساب المحدد، يجب أن تحاول "SYM" لرقمك منها مثلا.

b=rem(sym(7),sym(2.5))

وبعد ذلك سوف لا أي أخطاء من هذا القبيل، ولكن الحسابات الخاصة بك وسوف يكون أبطأ بكثير.

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