...
Non-Compliant Code Example
This non-compliant code example illustrates possible undefined behavior associated with demoting floating point represented numbers.
| Code Block | ||
|---|---|---|
| ||
long double ld; double d1; double d2; float f1; float f2; /* initializations */ f1 = (float)d1; f2 = (float)ld; d2 = (double)ld; |
In the assignments above, As a result of these conversions it is possible that the variable d1 is outside the range of values that can be represented by a float or that the variable ld is outside the range of values that can be represented as either a float or a double.
Compliant Solution
This compliant code solution properly checks to see whether the values to be stored can be represented properly in the new type.
| 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;
}
|
...