...
On most implementations, integer division by zero is a terminal error, commonly printing a diagnostic message and aborting the program.:
Code Block |
---|
double x = 0.0; double dResult = 1 / x; |
...
The C standard does not require all implementations to support floating-point exceptions. Each exception macro in fenv.h
is defined if, and only if, the corresponding exception is supported. Only implementations that use IEC 60559 (formerly IEEE-754) floating-point arithmetic are required to support all five exceptions defined by C (see the C Standard, Section section 7.6.2 [ISO/IEC 9899:2011]). Nevertheless, these functions are the most portable solution for handling floating-point exceptions.
...
Operating System | How to Handle Floating-Point Errors |
---|---|
Linux | Use the C floating-point exception functions. |
Windows | Use either the C floating-point exception functions or structured exception handling through |
Noncompliant Code Example
...
This compliant solution uses C Standard functions to handle floating-point errors.:
Code Block | ||||
---|---|---|---|---|
| ||||
#include <fenv.h> #pragma STDC FENV_ACCESS ON void fpOper_fenv(void) { double a = 1e-40, b, c = 0.1; float x = 0, y; int fpeRaised; /* ... */ feclearexcept(FE_ALL_EXCEPT); /* Store a into y is inexact and underflows: */ y = a; fpeRaised = fetestexcept(FE_ALL_EXCEPT); /* fpeRaised has FE_INEXACT and FE_UNDERFLOW */ feclearexcept(FE_ALL_EXCEPT); /* divide by zero operation */ b = y / x; fpeRaised = fetestexcept(FE_ALL_EXCEPT); /* fpeRaised has FE_DIVBYZERO */ feclearexcept(FE_ALL_EXCEPT); c = sin(30) * a; fpeRaised = fetestexcept(FE_ALL_EXCEPT); /* fpeRaised has FE_INEXACT */ feclearexcept(FE_ALL_EXCEPT); /* ... */ } |
...
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Compass/ROSE |
|
| Could detect violations of this rule by ensuring that floating-point operations are surrounded by | ||||||
PRQA QA-C |
| 4123 | Partially implemented. |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this recommendation on the CERT website.
...