...
Code Block | ||||
---|---|---|---|---|
| ||||
float calcPercentage(float value) { return (float)(value * 0.1f); } void floatRoutine(void) { float value = 99.0f; long double percentage; percentage = calcPercentage(value); } |
Unfortunately, not all compilers honor casts. This compliant solution will only work on compilers that do honor casts.
Compliant Solution (Alternative)
For platforms that do not honor casts, the range and precision must be forced by assignment to a variable of the correct type. This compliant solution forces the assignment by type-qualifying result
as volatile and assigning the result of the floating-point operation to result
before returning it:
Code Block | ||||
---|---|---|---|---|
| ||||
float calcPercentage(float value) {
volatile float result;
result = value * 0.1f;
return result;
}
void floatRoutine(void) {
float value = 99.0f;
long double percentage;
percentage = calcPercentage(value);
}
|
Compliant Solution (Outside the Function 1)
...