...
Code Block | ||
---|---|---|
| ||
float f1; int i1; /* initialize fl */ if (f1 > (float) INT_MAX || f1 < (float) INT_MIN) { /* Handle Errorerror */ } else { i1 = f1; } |
Noncompliant Code Example (demotions)
...
Code Block | ||
---|---|---|
| ||
#include <float.h> long double ld; double d1; double d2; float f1; float f2; /* initializations */ if (d1 > FLT_MAX || d1 < -FLT_MAX) { /* Handle error condition */ } else { f1 = (float)d1; } if (ld > FLT_MAX || ld < -FLT_MAX) { /* Handle error condition */ } else { f2 = (float)ld; } if (ld > DBL_MAX || ld < -DBL_MAX) { /* Handle error condition */ } else { d2 = (double)ld; } |
Risk
...
Assessment
Failing to check that a floating-point value fits within a demoted type can result in a value too large to be represented by the new type, resulting in undefined behavior.
...