مقایسه صحیح اعداد اعشاری

مقایسه صحیح اعداد اعشاری
۵ (۱۰۰%) ۵ votes

مقایسه صحیح اعداد اعشاری

به نظر شما خروجی کُد زیر چیست؟

  float pi = 3.14F;
  
  if(pi == 3.14)
  {
    printf("Equal!");
  }
  else
  {
    printf("Not Equal!");
  }

در کُد بالا عدد ۳٫۱۴ در متغیر pi قرار داده شده و سپس توسط دستور if، مقدار متغیر با عدد ۳٫۱۴ مقایسه شده است. به نظر شما در خروجی عبارت “Equal” چاپ خواهد شُد یا عبارت “Not Equal”؟

سوالی مشابه با این کُد در کانال تلگرام سایت تیچ تکس قرار گرفت و عده‌ی خیلی زیادی از دوستان پاسخ اشتباه دادند! و احتمالا هم شما به اشتباه عبارت “Equal” یا مساوی را انتخاب کردید!

این مطلب را هم بخوانید: ۵ گام برای راه اندازی پردازنده‌ها

شاید تعجب کنید، اما کُد بالا در خروجی عبارت دوم، یعنی عدم مساوری را چاپ خواهد کرد! این اتفاق به دلیل خطای ذاتی متغیرهای float است و متاسفانه بسیاری از برنامه‌نویسان از این مشکل خبر ندارند! این مشکل ربطی به نوع میکروکنترلری که استفاده می‌کنید ندارد و شامل تمامی میکروکنترلرها، از جمله میکروکنترلر ARM، میکروکنترلر AVR و سایر پردازنده است.

به عنوان مثال فرض کنید در برنامه مقدار دما را خوانده و با توجه به آن قرار است Heater را روشن یا خاموش کنید. اگر روش درست مقایسه اعداد اعشاری را ندانید، مطمعنا به مشکلاتی بر خواهید خورد که حتی دلیل وجود آنها را نمی‌دانید و به همین دلیل نمی‌توانید آن مشکل را در برنامه حل کنید!

اگر چه این مشکل مربوط به ذخیره سازی اعداد طبق استاندارد IEEE-754 است. اما ما برای توضیح روش درست مقایسه اعداد اعشاری از میکروکنترلرهای Cortex-M و کامپایلر IAR استفاده کردیم.

در این ویدئوی آموزشی، با هم روش صحیح مقایسه اعداد اعشاری را یاد می‌گیریم و خواهیم دید که این خطای اعداد اعشاری در نرم افزار ماشین حساب خود ویندوز هم وجود دارد.

این آموزش فوق العاده از سایت TeachTechs.ir (تیچ تکس)  را به هیچ عنوان از دست ندهید

با اشتراک این آموزش در شبکه‌های اجتماعی خود، به ما در ادامه تولید این آموزش‌ها کمک کنید.

منتظر نظرات شما هستم

درباره‌ی سید پیمان ذوالنوری

پس از بازدید از نمایشگاه تولیدات داخلی و دیدن نقطه ضعف‌ها تصمیم گرفتم پایگاهی آموزشی بسازم تا با هم خلا استفاده از تکنولوژی‌های پیشرفته را در تولیدات داخلی از بین ببریم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

طراحی سایت
با سلام لطفا تا اطلاع ثانویه فقط و فقط از طریق تلگرام با مجموعه در تماس باشید