NAME ieee_flags - mode and status function for IEEE standard arithmetic SYNOPSIS cc [ flag ... ] file ... -lsunmath -lm [ library ... ] #include <sunmath.h> int ieee_flags(const char *action, const char *mode, const char *in, char **out); DESCRIPTION This function provides easy access to the modes and status required to fully exploit ANSI/IEEE Std 754-1985 arithmetic in a C program. All arguments are pointers to strings. Results arising from invalid arguments and invalid combina- tions are undefined for efficiency. There are four types of action: ``get'', ``set'', ``clear'', and ``clearall''. There are three valid settings for mode, two corresponding to modes of IEEE arithmetic: ``direction'', ... current rounding direction mode ``precision'', ... current rounding precision mode and one corresponding to status of IEEE arithmetic: ``exception''. ... accrued exception-occurred status There are 14 types of in and out : ``nearest'', ... round toward nearest ``tozero'', ... round toward zero ``negative'', ... round toward negative infinity ``positive'', ... round toward positive infinity ``extended'', ``double'', ``single'', ``inexact'', ``division'', ... division by zero exception ``underflow'', ``overflow'', ``invalid'', ``all'', ... all five exceptions above ``common''. ... invalid, overflow, and division exceptions Note: ``all'' and ``common'' only make sense with ``set'' or ``clear''. For ``clearall'', ieee_flags() returns 0 and restores all default modes and status. Nothing will be assigned to out. Thus char *mode, *out, *in; ieee_flags("clearall",mode, in, &out); set rounding direction to ``nearest'', rounding precision to ``extended'', and all accrued exception-occurred status to zero. For ``clear'', ieee_flags() returns 0 and restores the default mode or status. Nothing will be assigned to out. Thus char *out, *in; ieee_flags("clear","direction", in, &out); ... set rounding direction to round to nearest. For ``set'', ieee_flags() returns 0 if the action is suc- cessful and 1 if the corresponding required status or mode is not available (for instance, not supported in hardware). Nothing will be assigned to out. Thus char *out, *in; ieee_flags ("set","direction","tozero",&out); ... set rounding direction to round toward zero; For ``get'', we have the following cases: Case 1: mode is ``direction''. In that case, out returns one of the four strings ``nearest'', ``tozero'', ``posi- tive'', ``negative''; and ieee_flags() returns a value corresponding to out according to the enum fp_direction_type defined in <sys/ieeefp.h>. Case 2: mode is ``precision''. In that case, out returns one of the three strings ``extended'', ``double'', ``sin- gle''; and ieee_flags() returns a value corresponding to out according to the enum fp_precision_type defined in <sys/ieeefp.h>. Case 3: mode is ``exception''. In that case, out returns (a) ``not available'' if information on exception is not available, (b) ``'' (the empty string) if no accrued exception, (c) the accrued exception that has the highest priority according to the list below (1) the exception named by in, (2) ``invalid'', (3) ``overflow'', (4) ``division'', (5) ``underflow'', (6) ``inexact''. In this case ieee_flags() returns a five or six bit value where each bit (cf. enum fp_exception_type in <sys/ieeefp.h>) corresponds to an exception-occurred accrued status flag: 0 = off, 1 = on. The bit corresponding to a particular exception varies among architectures; see /usr/include/sys/ieeefp.h. Example: extern int ieee_flags(const char *, const char *, const char *, char **); char *out; int k; ieee_flags ("clear","exception","all",&out); /* clear all accrued exceptions */ ... ... (code that generates three exceptions: overflow, invalid, inexact) ... k = ieee_flags("get","exception","overflow",&out); then out = ``overflow'', and k=25.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |