|
|||||||||||||
Technical Support On-Line Manuals Cx51 User's Guide ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Floating-point ErrorsThe 8051 does not contain an interrupt vector to trap floating-point errors; therefore, your software must respond appropriately to these error conditions. In addition to the normal floating-point values, a floating-point number may contain a binary error value. These values are defined as a part of the IEEE standard and are used whenever an error occurs during normal processing of floating-point operations. Your code should check for possible arithmetic errors at the end of each floating-point operation.
The C51 library function _chkfloat_ allows you to quickly check floating-point status. As an alternative, you may use the following union to store floating-point values. union f { float f; /* Floating-point value */ unsigned long ul; /* Unsigned long value */ }; This union contains a float and an unsigned long in order to perform floating-point math operations and to respond to the IEEE error states. For example: #define NaN 0xFFFFFFFF /* Not a number (error) */ #define plusINF 0x7F800000 /* Positive overflow */ #define minusINF 0xFF800000 /* Negative overflow */ union f { float f; /* Floating-point value */ unsigned long ul; /* Unsigned long value */ }; void main (void) { float a, b; union f x; x.f = a * b; if (x.ul == NaN || x.ul == plusINF || x.ul == minusINF) { /* handle the error */ } else { /* result is correct */ } } | ||||||||||||
|
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.