C and C++


LANG.ARITH.FMULOFLOW : Float Multiplication Overflow

Summary

A multiplication expression where:

Properties

Class Name Float Multiplication Overflow
Significance reliability
Mnemonic LANG.ARITH.FMULOFLOW
Categories
MisraC2023 MisraC2023:D.4.15 Evaluation of floating-point expressions shall not lead to the undetected generation of infinities and NaNs
Misra2012 Misra2012:D.4.15 Evaluation of floating-point expressions shall not lead to the undetected generation of infinities and NaNs
MisraC++2023 MisraC++2023:0.3.1 Floating-point arithmetic should be used appropriately
CWE CWE:682 Incorrect Calculation
CERT-C CERT-C:FLP00-C Understand the limitations of floating-point numbers
JSF++ JSF++:203 Evaluation of expressions shall not lead to overflow/underflow (unless required algorithmically and then should be heavily documented).
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Float Multiplication Overflow"

Example

/* Behavior described in comments is based on a system where the
 * maximum representable finite float is
 * 3.40282346638528859811704183484516925e+38F
 */

#define MYFLT 4e+37F

float floatfn(void);

float fmuloflow(void){
    return 1000 * MYFLT; /* 'Float Multiplication Overflow' warning issued here */
}

float fmuloflow_ok(void){
    return  2 * MYFLT;             /* ok: product is representable as float */
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.