Math Processor Unit Library

libmpu – library of arithmetic functions for integer, real, and complex numbers of increased digit capacity

16 Commits   0 Branches   2 Tags
868b2b66 (kx 2024-12-20 16:11:07 +0300   1) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   2) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   3)   __MPU_FLOATP.C
868b2b66 (kx 2024-12-20 16:11:07 +0300   4) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   5)        This file contains source code of functions for
868b2b66 (kx 2024-12-20 16:11:07 +0300   6)        REAL constants operations.
868b2b66 (kx 2024-12-20 16:11:07 +0300   7) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   8)        PART OF : MPU - library .
868b2b66 (kx 2024-12-20 16:11:07 +0300   9) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  10)        USAGE   : Internal only .
868b2b66 (kx 2024-12-20 16:11:07 +0300  11) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  12)        NOTE    : NONE .
868b2b66 (kx 2024-12-20 16:11:07 +0300  13) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  14)        Copyright (C) 2000 - 2024  by Andrew V.Kosteltsev.
868b2b66 (kx 2024-12-20 16:11:07 +0300  15)        All Rights Reserved.
868b2b66 (kx 2024-12-20 16:11:07 +0300  16)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  17) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  18) #ifdef HAVE_CONFIG_H
868b2b66 (kx 2024-12-20 16:11:07 +0300  19) #include <config.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  20) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  21) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  22) #include <errno.h>   /* errno(3)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  23) #include <string.h>  /* strcpy(3) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  24) #include <strings.h> /* bzero(3)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  25) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  26) #include <libmpu.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  27) #include <mpu-context.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  28) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  29) #include <mpu-emutype.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  30) #include <mpu-integer.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  31) #include <mpu-real.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  32) #include <mpu-floatp.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  33) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  34) #include <mpu-char.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  35) #include <mpu-symbols.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  36) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  37) #include <mpu-math-errno.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  38) #include <mpu-mtherr.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300  39) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  40) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  41) #if MPU_WORD_ORDER_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  42) #include <binexp/lbin_exp_emu32lsb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  43) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  44) #include <binexp/lbin_exp_emu32msb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  45) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  46) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  47) #if MPU_WORD_ORDER_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  48) #include <decexp/ldec_exp_emu32lsb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  49) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  50) #include <decexp/ldec_exp_emu32msb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  51) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  52) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  53) #if MPU_WORD_ORDER_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  54) #include <epsilon/ei_epsilon_emu32lsb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  55) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  56) #include <epsilon/ei_epsilon_emu32msb.dfn>
868b2b66 (kx 2024-12-20 16:11:07 +0300  57) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  58) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  59) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  60) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  61)   LIMITS for DECIMAL Exponent of all
868b2b66 (kx 2024-12-20 16:11:07 +0300  62)   Internal e-type data struct.
868b2b66 (kx 2024-12-20 16:11:07 +0300  63) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  64)     SIZE of CONSTANTS == nE+1.
868b2b66 (kx 2024-12-20 16:11:07 +0300  65)                 nE  = (int)internalNE( nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  66)                 nb  - number of bits of external
868b2b66 (kx 2024-12-20 16:11:07 +0300  67)                       e-type number.
868b2b66 (kx 2024-12-20 16:11:07 +0300  68)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  69) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  70) EMUSHORT *_get_maxdecexp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  71) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  72)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  73) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  74)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  75)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  76)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300  77)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300  78)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300  79)       rc = (EMUSHORT *)&_max_dec_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  80)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  81)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300  82)       rc = (EMUSHORT *)&_max_dec_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  83)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  84)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300  85)       rc = (EMUSHORT *)&_max_dec_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  86)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  87)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300  88)       rc = (EMUSHORT *)&_max_dec_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  89)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  90)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300  91)       rc = (EMUSHORT *)&_max_dec_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  92)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  93)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300  94)       rc = (EMUSHORT *)&_max_dec_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  95)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  96)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300  97)       rc = (EMUSHORT *)&_max_dec_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300  98)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  99)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 100)       rc = (EMUSHORT *)&_max_dec_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 101)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 102)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 103)       rc = (EMUSHORT *)&_max_dec_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 104)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 105)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 106)       rc = (EMUSHORT *)&_max_dec_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 107)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 108)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 109)       rc = (EMUSHORT *)&_max_dec_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 110)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 112)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 113)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 114)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 115)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 116)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 117)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 118)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 119) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 120)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 121) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 122)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 123) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 124) } /* End of _get_maxdecexp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 125) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 127) EMUSHORT *_get_mindecexp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 128) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 129)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 130) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 131)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 132)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 133)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 134)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 135)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 136)       rc = (EMUSHORT *)&_min_dec_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 137)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 138)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 139)       rc = (EMUSHORT *)&_min_dec_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 140)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 141)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 142)       rc = (EMUSHORT *)&_min_dec_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 143)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 144)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 145)       rc = (EMUSHORT *)&_min_dec_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 146)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 147)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 148)       rc = (EMUSHORT *)&_min_dec_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 149)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 150)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 151)       rc = (EMUSHORT *)&_min_dec_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 152)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 153)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 154)       rc =  (EMUSHORT *)&_min_dec_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 155)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 156)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 157)       rc = (EMUSHORT *)&_min_dec_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 158)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 159)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 160)       rc = (EMUSHORT *)&_min_dec_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 161)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 162)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 163)       rc = (EMUSHORT *)&_min_dec_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 164)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 165)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 166)       rc = (EMUSHORT *)&_min_dec_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 167)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 168) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 169)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 170)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 171)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 172)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 173)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 174)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 175)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 176) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 177)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 178) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 179)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 180) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 181) } /* End of _get_mindecexp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 182) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 184) EMUSHORT *_get_max_10_exp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 185) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 186)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 187) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 188)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 189)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 190)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 191)       rc = (EMUSHORT *)&_max_dec_exp_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 192)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 193)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 194)       rc = (EMUSHORT *)&_max_dec_exp_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 195)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 196)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 197)       rc = (EMUSHORT *)&_max_dec_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 198)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 199)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 200)       rc = (EMUSHORT *)&_max_dec_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 201)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 202)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 203)       rc = (EMUSHORT *)&_max_dec_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 204)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 205)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 206)       rc = (EMUSHORT *)&_max_dec_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 207)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 208)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 209)       rc = (EMUSHORT *)&_max_dec_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 210)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 211)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 212)       rc = (EMUSHORT *)&_max_dec_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 213)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 214)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 215)       rc = (EMUSHORT *)&_max_dec_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 216)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 217)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 218)       rc = (EMUSHORT *)&_max_dec_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 219)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 220)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 221)       rc = (EMUSHORT *)&_max_dec_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 222)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 223)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 224)       rc = (EMUSHORT *)&_max_dec_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 225)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 226)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 227)       rc = (EMUSHORT *)&_max_dec_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 228)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 230)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 231)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 232)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 233)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 234)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 235)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 236)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 237) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 238)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 239) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 240)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 241) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 242) } /* End of _get_max_10_exp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 243) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 244) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 245) EMUSHORT *_get_min_10_exp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 246) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 247)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 248) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 249)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 250)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 251)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 252)       rc = (EMUSHORT *)&_min_dec_exp_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 253)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 254)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 255)       rc = (EMUSHORT *)&_min_dec_exp_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 256)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 257)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 258)       rc = (EMUSHORT *)&_min_dec_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 259)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 260)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 261)       rc = (EMUSHORT *)&_min_dec_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 262)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 263)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 264)       rc = (EMUSHORT *)&_min_dec_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 265)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 266)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 267)       rc = (EMUSHORT *)&_min_dec_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 268)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 269)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 270)       rc = (EMUSHORT *)&_min_dec_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 271)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 272)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 273)       rc = (EMUSHORT *)&_min_dec_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 274)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 275)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 276)       rc = (EMUSHORT *)&_min_dec_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 277)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 278)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 279)       rc = (EMUSHORT *)&_min_dec_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 280)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 281)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 282)       rc = (EMUSHORT *)&_min_dec_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 283)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 284)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 285)       rc = (EMUSHORT *)&_min_dec_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 286)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 287)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 288)       rc = (EMUSHORT *)&_min_dec_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 289)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 290) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 291)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 292)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 293)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 294)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 295)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 296)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 297)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 298) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 299)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 300) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 301)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 302) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 303) } /* End of _get_min_10_exp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 305) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 306) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 307)   LIMITS for BINARY Exponent of all
868b2b66 (kx 2024-12-20 16:11:07 +0300 308)   Internal e-type data struct.
868b2b66 (kx 2024-12-20 16:11:07 +0300 309) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 310)     SIZE of CONSTANTS == nE+1.
868b2b66 (kx 2024-12-20 16:11:07 +0300 311)                 nE  = (int)internalNE( nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 312)                 nb  - number of bits of external
868b2b66 (kx 2024-12-20 16:11:07 +0300 313)                       e-type number.
868b2b66 (kx 2024-12-20 16:11:07 +0300 314)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 315) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 316) EMUSHORT *_get_max_max_2_exp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 317) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 318)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 320)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 321)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 322)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 323)       rc = (EMUSHORT *)&_max_max_bin_exp_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 324)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 325)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 326)       rc = (EMUSHORT *)&_max_max_bin_exp_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 327)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 328)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 329)       rc = (EMUSHORT *)&_max_max_bin_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 330)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 331)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 332)       rc = (EMUSHORT *)&_max_max_bin_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 333)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 334)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 335)       rc = (EMUSHORT *)&_max_max_bin_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 336)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 337)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 338)       rc = (EMUSHORT *)&_max_max_bin_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 339)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 340)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 341)       rc = (EMUSHORT *)&_max_max_bin_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 342)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 343)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 344)       rc = (EMUSHORT *)&_max_max_bin_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 345)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 346)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 347)       rc = (EMUSHORT *)&_max_max_bin_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 348)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 349)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 350)       rc = (EMUSHORT *)&_max_max_bin_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 351)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 352)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 353)       rc = (EMUSHORT *)&_max_max_bin_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 354)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 355)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 356)       rc = (EMUSHORT *)&_max_max_bin_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 357)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 358)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 359)       rc = (EMUSHORT *)&_max_max_bin_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 360)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 361) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 362)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 363)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 364)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 365)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 366)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 367)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 368)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 369) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 370)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 371) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 372)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 373) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 374) } /* End of _get_max_max_2_exp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 375) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 377) EMUSHORT *_get_max_2_exp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 378) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 379)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 380) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 381)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 382)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 383)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 384)       rc = (EMUSHORT *)&_max_bin_exp_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 385)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 386)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 387)       rc = (EMUSHORT *)&_max_bin_exp_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 388)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 389)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 390)       rc = (EMUSHORT *)&_max_bin_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 391)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 392)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 393)       rc = (EMUSHORT *)&_max_bin_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 394)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 395)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 396)       rc = (EMUSHORT *)&_max_bin_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 397)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 398)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 399)       rc = (EMUSHORT *)&_max_bin_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 400)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 401)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 402)       rc = (EMUSHORT *)&_max_bin_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 403)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 404)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 405)       rc = (EMUSHORT *)&_max_bin_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 406)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 407)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 408)       rc = (EMUSHORT *)&_max_bin_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 409)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 410)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 411)       rc = (EMUSHORT *)&_max_bin_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 412)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 413)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 414)       rc = (EMUSHORT *)&_max_bin_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 415)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 416)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 417)       rc = (EMUSHORT *)&_max_bin_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 418)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 419)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 420)       rc = (EMUSHORT *)&_max_bin_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 421)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 422) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 423)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 424)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 425)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 426)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 427)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 428)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 429)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 430) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 431)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 432) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 433)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 434) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 435) } /* End of _get_max_2_exp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 436) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 437) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 438) EMUSHORT *_get_min_2_exp_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 439) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 440)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 441) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 442)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 443)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 444)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 445)       rc = (EMUSHORT *)&_min_bin_exp_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 446)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 447)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 448)       rc = (EMUSHORT *)&_min_bin_exp_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 449)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 450)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 451)       rc = (EMUSHORT *)&_min_bin_exp_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 452)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 453)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 454)       rc = (EMUSHORT *)&_min_bin_exp_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 455)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 456)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 457)       rc = (EMUSHORT *)&_min_bin_exp_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 458)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 459)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 460)       rc = (EMUSHORT *)&_min_bin_exp_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 461)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 462)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 463)       rc = (EMUSHORT *)&_min_bin_exp_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 464)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 465)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 466)       rc = (EMUSHORT *)&_min_bin_exp_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 467)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 468)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 469)       rc = (EMUSHORT *)&_min_bin_exp_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 470)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 471)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 472)       rc = (EMUSHORT *)&_min_bin_exp_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 473)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 474)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 475)       rc = (EMUSHORT *)&_min_bin_exp_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 476)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 477)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 478)       rc = (EMUSHORT *)&_min_bin_exp_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 479)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 480)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 481)       rc = (EMUSHORT *)&_min_bin_exp_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 482)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 483) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 484)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 485)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 486)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 487)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 488)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 489)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 490)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 491) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 492)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 493) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 494)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 495) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 496) } /* End of _get_min_2_exp_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 497) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 498) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 499) int _get_ndec( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 500) /*****************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 501)   Количество десятичных знаков в мантиссе
868b2b66 (kx 2024-12-20 16:11:07 +0300 502)  *****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 503) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 504)   int  rc = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 505) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 506)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 507)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 508)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 509)       rc = REAL_32_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 510)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 511)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 512)       rc = REAL_64_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 513)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 514)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 515)       rc = REAL_128_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 516)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 517)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 518)       rc = REAL_256_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 519)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 520)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 521)       rc = REAL_512_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 522)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 523)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 524)       rc = REAL_1024_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 525)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 526)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 527)       rc = REAL_2048_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 528)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 529)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 530)       rc = REAL_4096_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 531)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 532)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 533)       rc = REAL_8192_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 534)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 535)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 536)       rc = REAL_16384_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 537)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 538)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 539)       rc = REAL_32768_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 540)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 541)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 542)       rc = REAL_65536_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 543)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 544)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 545)       rc = REAL_131072_MDEC_DIG;
868b2b66 (kx 2024-12-20 16:11:07 +0300 546)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 547) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 548)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 549)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 550)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 551)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 552)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 553)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 554)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 555) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 556)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 557) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 558)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 559) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 560) } /* End of _get_ndec() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 561) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 562) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 563) int _get_max_string( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 564) /***************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 565)   Максимальное количество десятичных знаков в числе
868b2b66 (kx 2024-12-20 16:11:07 +0300 566)  ***************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 567) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 568)   int  rc = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 569) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 570)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 571)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 572)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 573)       rc = REAL_32_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 574)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 575)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 576)       rc = REAL_64_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 577)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 578)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 579)       rc = REAL_128_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 580)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 581)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 582)       rc = REAL_256_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 583)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 584)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 585)       rc = REAL_512_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 586)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 587)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 588)       rc = REAL_1024_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 589)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 590)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 591)       rc = REAL_2048_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 592)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 593)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 594)       rc = REAL_4096_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 595)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 596)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 597)       rc = REAL_8192_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 598)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 599)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 600)       rc = REAL_16384_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 601)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 602)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 603)       rc = REAL_32768_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 604)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 605)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 606)       rc = REAL_65536_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 607)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 608)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 609)       rc = REAL_131072_MAX_STRING;
868b2b66 (kx 2024-12-20 16:11:07 +0300 610)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 612)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 613)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 614)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 615)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 616)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 617)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 618)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 619) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 620)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 621) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 622)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 623) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 624) } /* End of _get_max_string() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 625) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 626) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 627) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 628)   EPSILONs for all Internal e-type data struct.
868b2b66 (kx 2024-12-20 16:11:07 +0300 629)   EPSILON is smallest such that 1.0+EPSILON != 1.0.
868b2b66 (kx 2024-12-20 16:11:07 +0300 630)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 631) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 632) EMUSHORT *_get_epsilon_ptr( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 633) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 634)   EMUSHORT *rc = (EMUSHORT *)NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 635) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 636)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 637)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 638)     case NBR_32    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 639)       rc = (EMUSHORT *)&_ei_epsilon_32_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 640)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 641)     case NBR_64    :
868b2b66 (kx 2024-12-20 16:11:07 +0300 642)       rc = (EMUSHORT *)&_ei_epsilon_64_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 643)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 644)     case NBR_128   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 645)       rc = (EMUSHORT *)&_ei_epsilon_128_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 646)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 647)     case NBR_256   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 648)       rc = (EMUSHORT *)&_ei_epsilon_256_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 649)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 650)     case NBR_512   :
868b2b66 (kx 2024-12-20 16:11:07 +0300 651)       rc = (EMUSHORT *)&_ei_epsilon_512_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 652)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 653)     case NBR_1024  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 654)       rc = (EMUSHORT *)&_ei_epsilon_1024_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 655)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 656)     case NBR_2048  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 657)       rc = (EMUSHORT *)&_ei_epsilon_2048_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 658)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 659)     case NBR_4096  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 660)       rc = (EMUSHORT *)&_ei_epsilon_4096_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 661)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 662)     case NBR_8192  :
868b2b66 (kx 2024-12-20 16:11:07 +0300 663)       rc = (EMUSHORT *)&_ei_epsilon_8192_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 664)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 665)     case NBR_16384 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 666)       rc = (EMUSHORT *)&_ei_epsilon_16384_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 667)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 668)     case NBR_32768 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 669)       rc = (EMUSHORT *)&_ei_epsilon_32768_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 670)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 671)     case NBR_65536 :
868b2b66 (kx 2024-12-20 16:11:07 +0300 672)       rc = (EMUSHORT *)&_ei_epsilon_65536_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 673)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 674)     case NBR_131072:
868b2b66 (kx 2024-12-20 16:11:07 +0300 675)       rc = (EMUSHORT *)&_ei_epsilon_131072_[0];
868b2b66 (kx 2024-12-20 16:11:07 +0300 676)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 677) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 678)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300 679)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 680)       /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 681)       __real_error_no = __R_ESIZE__;
868b2b66 (kx 2024-12-20 16:11:07 +0300 682)       __STIND; /* Set REAL ind-produsing operation Flag */
868b2b66 (kx 2024-12-20 16:11:07 +0300 683)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300 684)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 685) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 686)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 687) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 688)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300 689) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 690) } /* End of _get_epsilon_ptr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 691) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 692) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 693) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 694) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 695)   Hide internal symbols:
868b2b66 (kx 2024-12-20 16:11:07 +0300 696)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 697) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 698) __mpu_hidden_decl(_get_maxdecexp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 699) __mpu_hidden_decl(_get_mindecexp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 700) __mpu_hidden_decl(_get_max_10_exp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 701) __mpu_hidden_decl(_get_min_10_exp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 702) __mpu_hidden_decl(_get_max_max_2_exp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 703) __mpu_hidden_decl(_get_max_2_exp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 704) __mpu_hidden_decl(_get_min_2_exp_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 705) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 706) __mpu_hidden_decl(_get_ndec);
868b2b66 (kx 2024-12-20 16:11:07 +0300 707) __mpu_hidden_decl(_get_max_string);
868b2b66 (kx 2024-12-20 16:11:07 +0300 708) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 709) __mpu_hidden_decl(_get_epsilon_ptr);
868b2b66 (kx 2024-12-20 16:11:07 +0300 710) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 711) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 712) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300 713)   End of hide internal symbols.
868b2b66 (kx 2024-12-20 16:11:07 +0300 714)  ***************************************************************/