Re: [PATCH v3 2/3] Add default implementation of fenv.h and all methods
Brian Inglis <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On 2019-08-07 07:28, Joel Sherrill wrote: > On Wed, Aug 7, 2019 at 8:27 AM Howland, Craig D. via newlib wrote: >> On Wednesday, August 7, 2019 4:36 AM Corinna Vinschen wrote: >>> On Aug 6 14:13, Joel Sherrill wrote: Wouldn't it be clearer to conditionally define those constants based on some obviously fictional symbol e.g. #if FLOATING_POINT_EXCEPTIONS_SUPPORTED // replace by implementation symbol /* * The following macros are to be defined if the respective exception is * supported by the implementation, each with a unique bit mask: * * FE_DIVBYZERO * FE_INEXACT * FE_INVALID * FE_OVERFLOW * FE_UNDERFLOW * * Other implementation-specific exceptions may be defined, and must start * with FE_ followed by a capital letter. * * FE_ALL_EXCEPT must be defined as the logical OR of all exceptions. */ #define FE_DIVBYZERO 0x00000001 #define FE_INEXACT 0x00000002 #define FE_INVALID 0x00000004 #define FE_OVERFLOW 0x00000008 #define FE_UNDERFLOW 0x00000010 #define FE_ALL_EXCEPT \ (FE_DIVBYZERO|FE_INEXACT|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW) /* * The following macros are to be defined if the respective rounding direction * is supported by the implementation via the fegetround() and fesetround() * functions, each with a unique positive value. * * FE_DOWNWARD * FE_TONEAREST * FE_TOWARDZERO * FE_UPWARD * * Other implementation-specific rounding modes may be defined, and must start * with FE_ followed by a capital letter. */ #define FE_DOWNWARD 1 #define FE_TONEAREST 2 #define FE_TOWARDZERO 3 #define FE_UPWARD 4 #endif // FLOATING_POINT_EXCEPTIONS_SUPPORTED - replace by implementation symbol #define FE_ALL_EXCEPT 0 /* NONE SUPPORTED IN PLACEHOLDER TEMPLATE */ >>>> +/* >>>> + * The following typedefs are required. See the C and POSIX standards >> for >>>> + * details: >>>> + * >>>> + * fenv_t >>>> + * fexcept_t >>>> + */ >>>> +typedef size_t fenv_t; >>>> +typedef size_t fexcept_t; >>> While these types are defined, the above macros are not. Wouldn't >>> it make sense to define all or nothing by default? >> The standards require the types to be defined, but the individual macros >> are to be defined only if supported by the implementation. The >> default implementation being provided supports nothing, only >> returning error, so it is proper for them to not be defined. But having >> them there commented out to serve as a template seems to be a good thing. > Quick reply. :) > This is the POSIX language: > "The *<fenv.h>* header shall define the following constants if and only if > the implementation supports the floating-point exception by means of the > floating-point functions *feclearexcept*(), *fegetexceptflag*(), > *feraiseexcept*(), *fesetexceptflag*() and *fetestexcept*(). > Each expands to an integer constant expression with values such that > bitwise-inclusive ORs of all combinations of the constants result in > distinct values." -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised.