...
Compliant Solution (float to int)
This compliant solution ensures assumes that the range of values of type type float is is greater than that of an an int, as is the case in most implementations:implementations. Unfortunately, there is no safe way to inquire about this assumption in the code short of already knowing the implementation. Converting INT_MAX to float is a problem on many implementations, resulting in a number one greater than the value of INT_MAX. Converting INT_MIN to float is a problem on many implementations, resulting in a number one less than the value of INT_MIN.
| Code Block | ||||
|---|---|---|---|---|
| ||||
#include <limits<float.h> #include <float<limits.h> #include <assert.h> void func(float f_a) { int i_a; if static_assert( (double)INT_MAX < (double)FLT_MAX), "not all int values can be represented as float" ); (f_a >= ((float)INT_MAX -1.0) || f_a < ((float)INT_MIN +1.0)|| (f_a >= 0.0F && f_a < FLT_MIN)) { /* Handle error */ } else { i_a = f_a; } } |
Noncompliant Code Example (Narrowing Conversion)
...