MISRA Discussion Forums

Full Version: Floating point test for equality
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
The previous MISRA version (2004) explicitly banned the use of tests for equality on floating point numbers (MISRA C 2004 rule 13.3).
MISRA C:2012 has a list of operands and essential types to avoid in the table in rule 10.1, but the use of the equality operator, ==, on the essential type floating is not restricted.
Could I suggest this is an unintentional omission?
The omission is quite deliberate!

Despite the logic of a simple, clear rule, the Working group were finding evidence that users were circumventing MISRA C:2004 rule 13.3 with constructs that were no "safer" than using the equality operator. The workaround was within the letter of the Rules, but quite clearly against the spirit - but the result was less maintainable code.

In MISRA C:2012, Directive 1.1 covers some of the generic aspects of using floating point - and as discussed in that Directive, there are many relevant issues and a project must decide how they wish to monitor the use of floating-point within the code produced by that project. Unfortunately there is no language subset that can be produced which avoids these issues.

Directive 4.1 also gives guidance on run-time failures - of which testing a floating-point number for equality is a likely candidate.