مقایسۀ برابری انواع float در استاندارد MISRA C، به عنوان یک الزام مطرح شده است (استاندارد MISRA C، قانون 13.3). متن این قانون بصورت زیر است:
Floating-point expressions shall not be tested for equality or inequality.
The inherent nature of floating-point types is such that comparisons of equality will often not evaluate to true even when they are expected to. In addition, the behaviour of such a comparison cannot be predicted before execution, and may well vary from one implementation to another.
در برنامه نویسی، عبارات floating-point نباید از نظر برابری یا نابرابری آزمایش شوند. ماهیت ذاتی انواع float به گونهای است که مقایسۀ برابری آنها اغلب درست نخواهد بود. رفتار چنین مقایسهای را نمیتوان قبل از اجرا پیشبینی کرد و ممکن است از یک اجرا به اجرای دیگر متفاوت باشد. مثلاً نتیجۀ آزمایش if(x == y) وقتی که x و y از نوع float باشند، غیر قابل پیشبینی است.
مقایسۀ برابری و نابرابری داده های float موضوی است که بسیاری از برنامه نویسان تا قبل از اینکه به مشکلات آن برخورد کنند، با آن آشنایی ندارند. به عنوام مثال در زمانی که در پروژه، دو متغیر اعشاری داریم و یکی مثلا از سنسور دما و یا وزن آمده و x نام گذاری شده و دیگری یک متغیر float بوده که از کاربر گرفته شده و y نامگذاری شده و در کدنویسی شرط if(x == y) و یا if( x <= y ) قرار می گیرد، رفتار نامشخصی مشاهده خواهد شد. به این معنی که در جایی انتظار داریم که این دو باهم برابر باشند، اما در برنامه برابر تشخیص داده نمی شود و برعکس. اینکه طرز صحیح مقایسه به چه صورت است در استاندارد MISRA C ترشیح شده است.
استاندارد MISRA C، یک استاندارد به منظور برنامه نویسی به زبان C برای سیستم های حیاتی است. این موارد بطور کامل در فیلم آموزش استاندارد MISRA C، کدنویسی سیستم های حیاتی یوبرد، ارائه شده است.
0 دیدگاه