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) #ifndef   __LIB_MPU_H
868b2b66 (kx 2024-12-20 16:11:07 +0300   3) #define   __LIB_MPU_H
868b2b66 (kx 2024-12-20 16:11:07 +0300   4) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   5) #ifdef  __cplusplus
868b2b66 (kx 2024-12-20 16:11:07 +0300   6) extern "C" {
868b2b66 (kx 2024-12-20 16:11:07 +0300   7) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300   8) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   9) #define MPU_REAL_IO_LIMIT            @LIBMPU_REAL_IO_LIMIT@
868b2b66 (kx 2024-12-20 16:11:07 +0300  10) #define MPU_MATH_FN_LIMIT            @LIBMPU_REAL_MATH_F_LIMIT@
868b2b66 (kx 2024-12-20 16:11:07 +0300  11) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  12) #define MPU_BYTE_ORDER               @GCC_BYTE_ORDER@
868b2b66 (kx 2024-12-20 16:11:07 +0300  13) #define MPU_BYTE_ORDER_BIG_ENDIAN    @GCC_BYTE_ORDER_BIG_ENDIAN@
868b2b66 (kx 2024-12-20 16:11:07 +0300  14) #define MPU_BYTE_ORDER_LITTLE_ENDIAN @GCC_BYTE_ORDER_LITTLE_ENDIAN@
868b2b66 (kx 2024-12-20 16:11:07 +0300  15) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  16) #define MPU_WORD_ORDER               @GCC_FLOAT_WORD_ORDER@
868b2b66 (kx 2024-12-20 16:11:07 +0300  17) #define MPU_WORD_ORDER_BIG_ENDIAN    @GCC_FLOAT_WORD_ORDER_BIG_ENDIAN@
868b2b66 (kx 2024-12-20 16:11:07 +0300  18) #define MPU_WORD_ORDER_LITTLE_ENDIAN @GCC_FLOAT_WORD_ORDER_LITTLE_ENDIAN@
868b2b66 (kx 2024-12-20 16:11:07 +0300  19) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  20) #define BITS_PER_MACHINE_REGISTER    @MACHINE_REGISTER_WIDTH@
868b2b66 (kx 2024-12-20 16:11:07 +0300  21) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  22) /******************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  23)   Minimal addressible UNIT of information:
868b2b66 (kx 2024-12-20 16:11:07 +0300  24)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  25) typedef @GCC_UINT8_TYPE@  __mpu_UNIT_t; /* unsigned UNIT */
868b2b66 (kx 2024-12-20 16:11:07 +0300  26) typedef @GCC_INT8_TYPE@  __mpu_SUNIT_t; /* signed UNIT */
868b2b66 (kx 2024-12-20 16:11:07 +0300  27) #define BITS_PER_UNIT_T  @GCC_CHAR_WIDTH@
868b2b66 (kx 2024-12-20 16:11:07 +0300  28) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  29) typedef @GCC_UINT8_TYPE@  __mpu_byte_t; /* unsigned byte */
868b2b66 (kx 2024-12-20 16:11:07 +0300  30) typedef @GCC_INT8_TYPE@  __mpu_sbyte_t; /* signed byte */
868b2b66 (kx 2024-12-20 16:11:07 +0300  31) #define BITS_PER_BYTE_T  @GCC_CHAR_WIDTH@
868b2b66 (kx 2024-12-20 16:11:07 +0300  32) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  33) /**********
868b2b66 (kx 2024-12-20 16:11:07 +0300  34)   ADDRESS:
868b2b66 (kx 2024-12-20 16:11:07 +0300  35)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  36) typedef @GCC_UINTPTR_TYPE@  __mpu_address_t; /* unsigned ADDRESS */
868b2b66 (kx 2024-12-20 16:11:07 +0300  37) typedef @GCC_UINTPTR_TYPE@  __mpu_saddress_t; /* signed DIFFADDRESS */
868b2b66 (kx 2024-12-20 16:11:07 +0300  38) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  39) /*******************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  40)   Signed DIFFerence of two PTR:
868b2b66 (kx 2024-12-20 16:11:07 +0300  41)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  42) typedef @GCC_PTRDIFF_TYPE@  __mpu_ptrdiff_t; /* signed PTRDIFF */
868b2b66 (kx 2024-12-20 16:11:07 +0300  43) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  44) /*************
868b2b66 (kx 2024-12-20 16:11:07 +0300  45)   SIZE types:
868b2b66 (kx 2024-12-20 16:11:07 +0300  46)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  47) typedef @GCC_SIZE_TYPE@  __mpu_size_t; /* unsigned SIZE */
868b2b66 (kx 2024-12-20 16:11:07 +0300  48) typedef @GCC_INTMAX_TYPE@  __mpu_ssize_t; /* signed SIZE: is type of a byte count, or error. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  49) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  50) /*****************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  51)   COUNTER is always unsigned:
868b2b66 (kx 2024-12-20 16:11:07 +0300  52)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  53) typedef __mpu_size_t  __mpu_count_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  54) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  55) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  56) /***************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  57)   ERRNO is always signed:
868b2b66 (kx 2024-12-20 16:11:07 +0300  58)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  59) typedef int __mpu_error_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  60) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  61) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  62) /*******
868b2b66 (kx 2024-12-20 16:11:07 +0300  63)   VOID:
868b2b66 (kx 2024-12-20 16:11:07 +0300  64)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  65) #define __mpu_void_t  void
868b2b66 (kx 2024-12-20 16:11:07 +0300  66) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  67) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  68) #define __mpu_UINT32_C(c) c ## @LIBMPU_UINT32_CONST_SUFFIX@
868b2b66 (kx 2024-12-20 16:11:07 +0300  69) #define __mpu_UINT64_C(c) c ## @LIBMPU_UINT64_CONST_SUFFIX@
868b2b66 (kx 2024-12-20 16:11:07 +0300  70) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  71) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  72) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  73)   Тип данных, используемый для операций с выровненной памятью.
868b2b66 (kx 2024-12-20 16:11:07 +0300  74)   Беззнаковый( 32 bits ).
868b2b66 (kx 2024-12-20 16:11:07 +0300  75)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  76) #define __mem_op_t      @GCC_UINT32_TYPE@
868b2b66 (kx 2024-12-20 16:11:07 +0300  77) #define MEM_OP_SIZE     (sizeof(__mem_op_t))
868b2b66 (kx 2024-12-20 16:11:07 +0300  78) #define MEM_OP_BYTES    4
868b2b66 (kx 2024-12-20 16:11:07 +0300  79) #define MEM_OP_BITS    32
868b2b66 (kx 2024-12-20 16:11:07 +0300  80) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  81) /*********************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  82)   Base data types:
868b2b66 (kx 2024-12-20 16:11:07 +0300  83)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  84) typedef @GCC_INT8_TYPE@  __mpu_int8_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  85) typedef @GCC_UINT8_TYPE@  __mpu_uint8_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  86) typedef @GCC_INT16_TYPE@  __mpu_int16_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  87) typedef @GCC_UINT16_TYPE@  __mpu_uint16_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  88) typedef @GCC_INT32_TYPE@  __mpu_int32_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  89) typedef @GCC_UINT32_TYPE@  __mpu_uint32_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  90) typedef @GCC_INT64_TYPE@  __mpu_int64_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  91) typedef @GCC_UINT64_TYPE@  __mpu_uint64_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  92) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  93) /*******
868b2b66 (kx 2024-12-20 16:11:07 +0300  94)   REAL:
868b2b66 (kx 2024-12-20 16:11:07 +0300  95)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  96) typedef float   __mpu_real32_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  97) typedef double  __mpu_real64_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300  98) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  99) /*********************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 100)   CHAR types are always unsigned:
868b2b66 (kx 2024-12-20 16:11:07 +0300 101)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 102) typedef @GCC_UINT8_TYPE@  __mpu_char8_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 103) typedef @GCC_UINT16_TYPE@  __mpu_char16_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 104) typedef @GCC_UINT32_TYPE@  __mpu_char32_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 105) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 106) /*********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 107)   UTF-8, UCS2, UCS4 types. UTF-8 CHAR is always unsigned:
868b2b66 (kx 2024-12-20 16:11:07 +0300 108)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 109) typedef @GCC_UINT8_TYPE@  __mpu_utf8_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 110) typedef @GCC_UINT16_TYPE@  __mpu_ucs2_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 111) typedef @GCC_UINT32_TYPE@  __mpu_ucs4_t;
868b2b66 (kx 2024-12-20 16:11:07 +0300 112) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 113) /*********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 114)   Always signed with a size larger than any type of char:
868b2b66 (kx 2024-12-20 16:11:07 +0300 115)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 116) typedef @GCC_INT64_TYPE@  __mpu_int_c;
868b2b66 (kx 2024-12-20 16:11:07 +0300 117) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 118) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 119) extern void __mpu_init( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 120) extern void __mpu_free_context( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 121) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 122) /********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 123)   Error numbers:
868b2b66 (kx 2024-12-20 16:11:07 +0300 124)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 125) extern __mpu_error_t *__ptr_integer_error_no( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 126) extern __mpu_error_t *__ptr_real_error_no   ( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 127) extern __mpu_error_t *__ptr_complex_error_no( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 128) extern __mpu_error_t *__ptr_math_error_no   ( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 129) #define __mpu_integer_error_no  (*__ptr_integer_error_no())
868b2b66 (kx 2024-12-20 16:11:07 +0300 130) #define __mpu_real_error_no     (*__ptr_real_error_no())
868b2b66 (kx 2024-12-20 16:11:07 +0300 131) #define __mpu_complex_error_no  (*__ptr_complex_error_no())
868b2b66 (kx 2024-12-20 16:11:07 +0300 132) #define __mpu_math_error_no     (*__ptr_math_error_no())
868b2b66 (kx 2024-12-20 16:11:07 +0300 133) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 134) extern __mpu_error_t *__ptr_extra_warnings  ( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 135) #define __mpu_extra_warnings    (*__ptr_extra_warnings())
868b2b66 (kx 2024-12-20 16:11:07 +0300 136) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 137) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 138) extern void __mpu_clear_iflags( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 139) extern void __mpu_clear_rflags( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 140) extern void __mpu_clear_mflags( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 141) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 142) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 143) /* Get integer flags: */
31f615c1 (kx 2024-12-28 23:52:17 +0300 144) extern  int __mpu_gta( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 145) extern  int __mpu_gtc( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 146) extern  int __mpu_gto( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 147) extern  int __mpu_gts( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 148) extern  int __mpu_gtp( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 149) extern  int __mpu_gtz( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 150) extern  int __mpu_gtr( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 151) extern  int __mpu_gtv( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 152) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 153) /* Set integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 154) extern void __mpu_sta( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 155) extern void __mpu_stc( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 156) extern void __mpu_sto( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 157) extern void __mpu_sts( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 158) extern void __mpu_stp( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 159) extern void __mpu_stz( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 160) extern void __mpu_str( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 161) extern void __mpu_stv( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 162) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 163) /* Clear integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 164) extern void __mpu_cla( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 165) extern void __mpu_clc( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 166) extern void __mpu_clo( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 167) extern void __mpu_cls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 168) extern void __mpu_clp( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 169) extern void __mpu_clz( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 170) extern void __mpu_clr( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 171) extern void __mpu_clv( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 172) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 173) /* Complement integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 174) extern void __mpu_cma( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 175) extern void __mpu_cmc( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 176) extern void __mpu_cmo( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 177) extern void __mpu_cms( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 178) extern void __mpu_cmp( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 179) extern void __mpu_cmz( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 180) extern void __mpu_cmr( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 181) extern void __mpu_cmv( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 182) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 183) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 184) /* Get real flags: */
31f615c1 (kx 2024-12-28 23:52:17 +0300 185) extern  int __mpu_gtdom( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 186) extern  int __mpu_gtsng( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 187) extern  int __mpu_gtovf( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 188) extern  int __mpu_gtudf( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 189) extern  int __mpu_gttls( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 190) extern  int __mpu_gtpls( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 191) extern  int __mpu_gtind( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 192) extern  int __mpu_gtinx( void );
31f615c1 (kx 2024-12-28 23:52:17 +0300 193) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 194) /* Set real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 195) extern void __mpu_stdom( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 196) extern void __mpu_stsng( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 197) extern void __mpu_stovf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 198) extern void __mpu_studf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 199) extern void __mpu_sttls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 200) extern void __mpu_stpls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 201) extern void __mpu_stind( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 202) extern void __mpu_stinx( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 203) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 204) /* Clear real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 205) extern void __mpu_cldom( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 206) extern void __mpu_clsng( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 207) extern void __mpu_clovf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 208) extern void __mpu_cludf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 209) extern void __mpu_cltls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 210) extern void __mpu_clpls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 211) extern void __mpu_clind( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 212) extern void __mpu_clinx( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 213) 
31f615c1 (kx 2024-12-28 23:52:17 +0300 214) /* Complement real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 215) extern void __mpu_cmdom( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 216) extern void __mpu_cmsng( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 217) extern void __mpu_cmovf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 218) extern void __mpu_cmudf( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 219) extern void __mpu_cmtls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 220) extern void __mpu_cmpls( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 221) extern void __mpu_cmind( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 222) extern void __mpu_cminx( void );
868b2b66 (kx 2024-12-20 16:11:07 +0300 223) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 224) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 225) /********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 226)   Math ERRNO declarations:
868b2b66 (kx 2024-12-20 16:11:07 +0300 227)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 228) #define MPU_MATH_ERROR_MSG_SIZE  4096
868b2b66 (kx 2024-12-20 16:11:07 +0300 229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 230) #define __EUNKNOWN__     0   /* unknown error type (for all sources) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 232) /**********************
868b2b66 (kx 2024-12-20 16:11:07 +0300 233)   Integer error types:
868b2b66 (kx 2024-12-20 16:11:07 +0300 234)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 235) #define __I_ESIZE__      1   /* Invalid size of operand(s)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 236) #define __I_ESHIFT__     2   /* Invalid number of shifts    */
868b2b66 (kx 2024-12-20 16:11:07 +0300 237) #define __I_ENUMBER__    3   /* Invalid number              */
868b2b66 (kx 2024-12-20 16:11:07 +0300 238) #define __I_ERADIX__     4   /* Invalid radix               */
868b2b66 (kx 2024-12-20 16:11:07 +0300 239) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 240) #define __I_MAX_ERRNO    5
868b2b66 (kx 2024-12-20 16:11:07 +0300 241) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 242) /*******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 243)   Real error types:
868b2b66 (kx 2024-12-20 16:11:07 +0300 244)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 245) #define __R_ESIZE__      1 /* Invalid size of operand(s)       */
868b2b66 (kx 2024-12-20 16:11:07 +0300 246) #define __R_ETRUNC__     2 /* Invalid number of TRUNC bits(BZ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 247) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 248) #define __R_MAX_ERRNO    3
868b2b66 (kx 2024-12-20 16:11:07 +0300 249) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 250) /**********************
868b2b66 (kx 2024-12-20 16:11:07 +0300 251)   Complex error types:
868b2b66 (kx 2024-12-20 16:11:07 +0300 252)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 253) #define __C_EDIVZEROBYZERO__   1 /* Complex attempted division by zero */
868b2b66 (kx 2024-12-20 16:11:07 +0300 254) #define __C_ELOGOFZERO__       2 /* Complex attempted LOG of zero magnitude number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 255) #define __C_EPOWOFZERO__       3 /* Complex attempted POW of zero magnitude number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 256) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 257) #define __C_MAX_ERRNO    4
868b2b66 (kx 2024-12-20 16:11:07 +0300 258) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 259) /*******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 260)   Math error types:
868b2b66 (kx 2024-12-20 16:11:07 +0300 261)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 262) #define __DOMAIN__       1   /* argument domain error       */
868b2b66 (kx 2024-12-20 16:11:07 +0300 263) #define __SING__         2   /* argument singularity        */
868b2b66 (kx 2024-12-20 16:11:07 +0300 264) #define __OVERFLOW__     3   /* overflow range error        */
868b2b66 (kx 2024-12-20 16:11:07 +0300 265) #define __UNDERFLOW__    4   /* underflow range error       */
868b2b66 (kx 2024-12-20 16:11:07 +0300 266) #define __TLOSS__        5   /* total loss of precision     */
868b2b66 (kx 2024-12-20 16:11:07 +0300 267) #define __PLOSS__        6   /* partial loss of precision   */
868b2b66 (kx 2024-12-20 16:11:07 +0300 268) #define __INVALID__      7   /* -InD - produsing operation  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 269) #define __INEXACT__      8   /* inexact result of operation */
868b2b66 (kx 2024-12-20 16:11:07 +0300 270) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 271) #define __M_MAX_ERRNO    9
868b2b66 (kx 2024-12-20 16:11:07 +0300 272) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 274) /*******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 275)   Struct Exception:
868b2b66 (kx 2024-12-20 16:11:07 +0300 276)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300 277) /***
868b2b66 (kx 2024-12-20 16:11:07 +0300 278)   __exception.who - источник ошибки.
868b2b66 (kx 2024-12-20 16:11:07 +0300 279)  ************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 280) #define _UNKNOWN_   4
868b2b66 (kx 2024-12-20 16:11:07 +0300 281) #define _COMPLEX_   3
868b2b66 (kx 2024-12-20 16:11:07 +0300 282) #define _REAL_      2
868b2b66 (kx 2024-12-20 16:11:07 +0300 283) #define _INTEGER_   1
868b2b66 (kx 2024-12-20 16:11:07 +0300 284) #define _MATH_      0
868b2b66 (kx 2024-12-20 16:11:07 +0300 285) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 286) /***
868b2b66 (kx 2024-12-20 16:11:07 +0300 287)   __exception.msg_type - тип сообщения.
868b2b66 (kx 2024-12-20 16:11:07 +0300 288)  ***************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 289) #define         _MSG_   2
868b2b66 (kx 2024-12-20 16:11:07 +0300 290) #define   _ERROR_MSG_   1
868b2b66 (kx 2024-12-20 16:11:07 +0300 291) #define _WARNING_MSG_   0
868b2b66 (kx 2024-12-20 16:11:07 +0300 292) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 293) struct __exception
868b2b66 (kx 2024-12-20 16:11:07 +0300 294) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 295)    int             who;      /* _COMPLEX_, _REAL_, _INTEGER_, _MATH_ */
868b2b66 (kx 2024-12-20 16:11:07 +0300 296) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 297)    int             type;
868b2b66 (kx 2024-12-20 16:11:07 +0300 298)    __mpu_char8_t  *name;
868b2b66 (kx 2024-12-20 16:11:07 +0300 299)    __mpu_char8_t  *msg;
868b2b66 (kx 2024-12-20 16:11:07 +0300 300)    int             msg_type; /* >= 1 - error, 0 - warning */
868b2b66 (kx 2024-12-20 16:11:07 +0300 301) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 302)    int             nb_a1;    /* number of bytes in arg_1        */
868b2b66 (kx 2024-12-20 16:11:07 +0300 303)    int             nb_a2;    /* number of bytes in arg_2        */
868b2b66 (kx 2024-12-20 16:11:07 +0300 304)    int             nb_rv;    /* number of bytes in return_value */
868b2b66 (kx 2024-12-20 16:11:07 +0300 305) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 306)    unsigned char  *arg_1;
868b2b66 (kx 2024-12-20 16:11:07 +0300 307)    unsigned char  *arg_2;
868b2b66 (kx 2024-12-20 16:11:07 +0300 308)    unsigned char  *return_value;
868b2b66 (kx 2024-12-20 16:11:07 +0300 309) };
868b2b66 (kx 2024-12-20 16:11:07 +0300 310) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 311) extern __mpu_utf8_t *
868b2b66 (kx 2024-12-20 16:11:07 +0300 312)             __mpu_utf8mpu_error( int who, __mpu_error_t errnum );
868b2b66 (kx 2024-12-20 16:11:07 +0300 313) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 314) extern int  __use_default_math_error;
868b2b66 (kx 2024-12-20 16:11:07 +0300 315) extern int  __mpu_math_error( struct __exception *pexcept );
868b2b66 (kx 2024-12-20 16:11:07 +0300 316) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 317) extern int  __use_default_mpu_warning;
868b2b66 (kx 2024-12-20 16:11:07 +0300 318) extern void __mpu_warning( struct __exception *pexcept );
868b2b66 (kx 2024-12-20 16:11:07 +0300 319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 320) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 321) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 322)   Размер данных в байтах:
868b2b66 (kx 2024-12-20 16:11:07 +0300 323)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 324) /********* integer ******
868b2b66 (kx 2024-12-20 16:11:07 +0300 325)            =
868b2b66 (kx 2024-12-20 16:11:07 +0300 326)  ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 327) #define NB_I8           1
868b2b66 (kx 2024-12-20 16:11:07 +0300 328) #define NB_I16          2
868b2b66 (kx 2024-12-20 16:11:07 +0300 329) #define NB_I32          4
868b2b66 (kx 2024-12-20 16:11:07 +0300 330) #define NB_I64          8
868b2b66 (kx 2024-12-20 16:11:07 +0300 331) #define NB_I128        16
868b2b66 (kx 2024-12-20 16:11:07 +0300 332) #define NB_I256        32
868b2b66 (kx 2024-12-20 16:11:07 +0300 333) #define NB_I512        64
868b2b66 (kx 2024-12-20 16:11:07 +0300 334) #define NB_I1024      128
868b2b66 (kx 2024-12-20 16:11:07 +0300 335) #define NB_I2048      256
868b2b66 (kx 2024-12-20 16:11:07 +0300 336) #define NB_I4096      512
868b2b66 (kx 2024-12-20 16:11:07 +0300 337) #define NB_I8192     1024
868b2b66 (kx 2024-12-20 16:11:07 +0300 338) #define NB_I16384    2048
868b2b66 (kx 2024-12-20 16:11:07 +0300 339) #define NB_I32768    4096
868b2b66 (kx 2024-12-20 16:11:07 +0300 340) #define NB_I65536    8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 341) #define NB_I_MAX     8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 342) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 343) /********* real *********
868b2b66 (kx 2024-12-20 16:11:07 +0300 344)            =
868b2b66 (kx 2024-12-20 16:11:07 +0300 345)  ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 346) #define NB_R32          4
868b2b66 (kx 2024-12-20 16:11:07 +0300 347) #define NB_R64          8
868b2b66 (kx 2024-12-20 16:11:07 +0300 348) #define NB_R128        16
868b2b66 (kx 2024-12-20 16:11:07 +0300 349) #define NB_R256        32
868b2b66 (kx 2024-12-20 16:11:07 +0300 350) #define NB_R512        64
868b2b66 (kx 2024-12-20 16:11:07 +0300 351) #define NB_R1024      128
868b2b66 (kx 2024-12-20 16:11:07 +0300 352) #define NB_R2048      256
868b2b66 (kx 2024-12-20 16:11:07 +0300 353) #define NB_R4096      512
868b2b66 (kx 2024-12-20 16:11:07 +0300 354) #define NB_R8192     1024
868b2b66 (kx 2024-12-20 16:11:07 +0300 355) #define NB_R16384    2048
868b2b66 (kx 2024-12-20 16:11:07 +0300 356) #define NB_R32768    4096
868b2b66 (kx 2024-12-20 16:11:07 +0300 357) #define NB_R65536    8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 358) #define NB_R_MAX     8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 359) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 360) /********* complex ******
868b2b66 (kx 2024-12-20 16:11:07 +0300 361)            =
868b2b66 (kx 2024-12-20 16:11:07 +0300 362)  ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 363) #define NB_C32          4
868b2b66 (kx 2024-12-20 16:11:07 +0300 364) #define NB_C64          8
868b2b66 (kx 2024-12-20 16:11:07 +0300 365) #define NB_C128        16
868b2b66 (kx 2024-12-20 16:11:07 +0300 366) #define NB_C256        32
868b2b66 (kx 2024-12-20 16:11:07 +0300 367) #define NB_C512        64
868b2b66 (kx 2024-12-20 16:11:07 +0300 368) #define NB_C1024      128
868b2b66 (kx 2024-12-20 16:11:07 +0300 369) #define NB_C2048      256
868b2b66 (kx 2024-12-20 16:11:07 +0300 370) #define NB_C4096      512
868b2b66 (kx 2024-12-20 16:11:07 +0300 371) #define NB_C8192     1024
868b2b66 (kx 2024-12-20 16:11:07 +0300 372) #define NB_C16384    2048
868b2b66 (kx 2024-12-20 16:11:07 +0300 373) #define NB_C32768    4096
868b2b66 (kx 2024-12-20 16:11:07 +0300 374) #define NB_C65536    8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 375) #define NB_C_MAX     8192
868b2b66 (kx 2024-12-20 16:11:07 +0300 376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 377) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 378) typedef __mpu_byte_t  mpu_int;     /*    integer number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 379) typedef __mpu_byte_t  mpu_real;    /*       real number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 380) typedef __mpu_byte_t  mpu_complex; /*    complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 381) typedef __mpu_byte_t *mpu_p_num;   /* pointer to number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 383) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 384) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 385)   INTEGER DATA TYPES
868b2b66 (kx 2024-12-20 16:11:07 +0300 386)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 387) typedef __mpu_byte_t  mpu_int8_t[1];
868b2b66 (kx 2024-12-20 16:11:07 +0300 388) typedef __mpu_byte_t  mpu_int16_t[2];
868b2b66 (kx 2024-12-20 16:11:07 +0300 389) typedef __mpu_byte_t  mpu_int32_t[4];
868b2b66 (kx 2024-12-20 16:11:07 +0300 390) typedef __mpu_byte_t  mpu_int64_t[8];
868b2b66 (kx 2024-12-20 16:11:07 +0300 391) typedef __mpu_byte_t  mpu_int128_t[16];
868b2b66 (kx 2024-12-20 16:11:07 +0300 392) typedef __mpu_byte_t  mpu_int256_t[32];
868b2b66 (kx 2024-12-20 16:11:07 +0300 393) typedef __mpu_byte_t  mpu_int512_t[64];
868b2b66 (kx 2024-12-20 16:11:07 +0300 394) typedef __mpu_byte_t  mpu_int1024_t[128];
868b2b66 (kx 2024-12-20 16:11:07 +0300 395) typedef __mpu_byte_t  mpu_int2048_t[256];
868b2b66 (kx 2024-12-20 16:11:07 +0300 396) typedef __mpu_byte_t  mpu_int4096_t[512];
868b2b66 (kx 2024-12-20 16:11:07 +0300 397) typedef __mpu_byte_t  mpu_int8192_t[1024];
868b2b66 (kx 2024-12-20 16:11:07 +0300 398) typedef __mpu_byte_t  mpu_int16384_t[2048];
868b2b66 (kx 2024-12-20 16:11:07 +0300 399) typedef __mpu_byte_t  mpu_int32768_t[4096];
868b2b66 (kx 2024-12-20 16:11:07 +0300 400) typedef __mpu_byte_t  mpu_int65536_t[8192];
868b2b66 (kx 2024-12-20 16:11:07 +0300 401) typedef __mpu_byte_t  mpu_wide_int_t[8192];
868b2b66 (kx 2024-12-20 16:11:07 +0300 402) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 404) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 405)   REAL DATA TYPES
868b2b66 (kx 2024-12-20 16:11:07 +0300 406)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 407) typedef __mpu_byte_t  mpu_real32_t[4];
868b2b66 (kx 2024-12-20 16:11:07 +0300 408) typedef __mpu_byte_t  mpu_real64_t[8];
868b2b66 (kx 2024-12-20 16:11:07 +0300 409) typedef __mpu_byte_t  mpu_real128_t[16];
868b2b66 (kx 2024-12-20 16:11:07 +0300 410) typedef __mpu_byte_t  mpu_real256_t[32];
868b2b66 (kx 2024-12-20 16:11:07 +0300 411) typedef __mpu_byte_t  mpu_real512_t[64];
868b2b66 (kx 2024-12-20 16:11:07 +0300 412) typedef __mpu_byte_t  mpu_real1024_t[128];
868b2b66 (kx 2024-12-20 16:11:07 +0300 413) typedef __mpu_byte_t  mpu_real2048_t[256];
868b2b66 (kx 2024-12-20 16:11:07 +0300 414) typedef __mpu_byte_t  mpu_real4096_t[512];
868b2b66 (kx 2024-12-20 16:11:07 +0300 415) typedef __mpu_byte_t  mpu_real8192_t[1024];
868b2b66 (kx 2024-12-20 16:11:07 +0300 416) typedef __mpu_byte_t  mpu_real16384_t[2048];
868b2b66 (kx 2024-12-20 16:11:07 +0300 417) typedef __mpu_byte_t  mpu_real32768_t[4096];
868b2b66 (kx 2024-12-20 16:11:07 +0300 418) typedef __mpu_byte_t  mpu_real65536_t[8192];
868b2b66 (kx 2024-12-20 16:11:07 +0300 419) typedef __mpu_byte_t  mpu_wide_real_t[8192];
868b2b66 (kx 2024-12-20 16:11:07 +0300 420) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 421) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 422) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 423)   COMPLEX DATA TYPES
868b2b66 (kx 2024-12-20 16:11:07 +0300 424) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 425)   NOTE:
868b2b66 (kx 2024-12-20 16:11:07 +0300 426)         Следует помнить, что при вызове функций, работающих
868b2b66 (kx 2024-12-20 16:11:07 +0300 427)         с комплексными числами надо задавать не фактический,
868b2b66 (kx 2024-12-20 16:11:07 +0300 428)         а половинный размер комплексных операндов !
868b2b66 (kx 2024-12-20 16:11:07 +0300 429)         SEE:
868b2b66 (kx 2024-12-20 16:11:07 +0300 430)            following NB_C32, NB_C64, ..., NB_C1024 NB_C_MAX.
868b2b66 (kx 2024-12-20 16:11:07 +0300 431)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 432) typedef __mpu_byte_t  mpu_complex32_t[8];
868b2b66 (kx 2024-12-20 16:11:07 +0300 433) typedef __mpu_byte_t  mpu_complex64_t[16];
868b2b66 (kx 2024-12-20 16:11:07 +0300 434) typedef __mpu_byte_t  mpu_complex128_t[32];
868b2b66 (kx 2024-12-20 16:11:07 +0300 435) typedef __mpu_byte_t  mpu_complex256_t[64];
868b2b66 (kx 2024-12-20 16:11:07 +0300 436) typedef __mpu_byte_t  mpu_complex512_t[128];
868b2b66 (kx 2024-12-20 16:11:07 +0300 437) typedef __mpu_byte_t  mpu_complex1024_t[256];
868b2b66 (kx 2024-12-20 16:11:07 +0300 438) typedef __mpu_byte_t  mpu_complex2048_t[512];
868b2b66 (kx 2024-12-20 16:11:07 +0300 439) typedef __mpu_byte_t  mpu_complex4096_t[1024];
868b2b66 (kx 2024-12-20 16:11:07 +0300 440) typedef __mpu_byte_t  mpu_complex8192_t[2048];
868b2b66 (kx 2024-12-20 16:11:07 +0300 441) typedef __mpu_byte_t  mpu_complex16384_t[4096];
868b2b66 (kx 2024-12-20 16:11:07 +0300 442) typedef __mpu_byte_t  mpu_complex32768_t[8192];
868b2b66 (kx 2024-12-20 16:11:07 +0300 443) typedef __mpu_byte_t  mpu_complex65536_t[16384];
868b2b66 (kx 2024-12-20 16:11:07 +0300 444) typedef __mpu_byte_t  mpu_wide_complex_t[16384];
868b2b66 (kx 2024-12-20 16:11:07 +0300 445) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 446) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 447) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 448)                  INTEGER ARITHMETIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300 449)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 450) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 451) extern void iadd    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 452) extern void iadc    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 453) extern void isub    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 454) extern void isbb    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 455) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 456) extern void ishl    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 457) extern void ishr    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 458) extern void isal    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 459) extern void isar    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 460) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 461) extern void irol    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 462) extern void iror    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 463) extern void ircl    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 464) extern void ircr    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 465) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 466) extern void ishln   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 467) extern void ishrn   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 468) extern void isaln   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 469) extern void isarn   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 470) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 471) extern void iroln   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 472) extern void irorn   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 473) extern void ircln   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 474) extern void ircrn   ( mpu_int *c, mpu_int *a, unsigned int ns, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 475) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 476) extern void inot    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 477) extern void ineg    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 478) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 479) extern void iand    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 480) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 481) extern void itest   ( mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 482) extern void icmp    ( mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 483) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 484) extern void ior     ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 485) extern void ixor    ( mpu_int *c, mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 486) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 487) extern void iinc    ( mpu_int *c, mpu_int *a, int nb );
07a2b481 (kx 2024-12-28 08:20:38 +0300 488) extern void idec    ( mpu_int *c, mpu_int *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 489) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 490) extern void ixchg   ( mpu_int *a, mpu_int *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 491) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 492) extern void icpy    ( mpu_int *c, mpu_int *a, int nb_c, int nb_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300 493) extern void icvt    ( mpu_int *c, mpu_int *a, int nb_c, int nb_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300 494) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 495) extern void imul    ( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num );
868b2b66 (kx 2024-12-20 16:11:07 +0300 496) extern void ismul   ( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num );
868b2b66 (kx 2024-12-20 16:11:07 +0300 497) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 498) extern void idiv    ( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 499) extern void isdiv   ( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, 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) /* for integer ...itoa() functions */
868b2b66 (kx 2024-12-20 16:11:07 +0300 503) #define RADIX_BIN  2
868b2b66 (kx 2024-12-20 16:11:07 +0300 504) #define RADIX_OCT  8
868b2b66 (kx 2024-12-20 16:11:07 +0300 505) #define RADIX_DEC 10
868b2b66 (kx 2024-12-20 16:11:07 +0300 506) #define RADIX_HEX 16
868b2b66 (kx 2024-12-20 16:11:07 +0300 507) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 508) /* for integer ...itoa() functions and real ...rtoa() functions */
868b2b66 (kx 2024-12-20 16:11:07 +0300 509) #define LOWERCASE  0
868b2b66 (kx 2024-12-20 16:11:07 +0300 510) #define UPPERCASE  1
868b2b66 (kx 2024-12-20 16:11:07 +0300 511) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 512) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 513) extern void iatoi   ( mpu_int *c, __mpu_char8_t *str, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 514) extern void iatoui  ( mpu_int *c, __mpu_char8_t *str, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 515) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 516) extern void iitoa   ( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 517) extern void iuitoa  ( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 518) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 519) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 520) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 521)                    REAL ARITHMETIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300 522)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 523) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 524) extern int  _sizeof_exp       ( int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 525) extern int  _real_mant_digs   ( int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 526) extern int  _real_digs        ( int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 527) extern int  _real_max_string  ( int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 528) extern void _real_epsilon     ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 529) extern void _real_max_10_exp  ( mpu_int *e, int nb_e, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 530) extern void _real_min_10_exp  ( mpu_int *e, int nb_e, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 531) extern void _real_max_max_exp ( mpu_int *e, int nb_e, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 532) extern void _real_max_exp     ( mpu_int *e, int nb_e, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 533) extern void _real_min_exp     ( mpu_int *e, int nb_e, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 534) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 535) extern void _m_zero           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 536) extern void _m_half           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 537) extern void _m_one            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 538) extern void _m_two            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 539) extern void _m_ten            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 540) extern void _m_mten           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 541) extern void _m_32             ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 542) extern void _m_PI             ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 543) extern void _m_E              ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 544) extern void _m_1_ln2          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 545) extern void _m_ln2            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 546) extern void _m_1_ln10         ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 547) extern void _m_ln10           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 548) extern void _m_1_lg2          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 549) extern void _m_lg2            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 550) extern void _m_PI_2           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 551) extern void _m_PI_3           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 552) extern void _m_PI_4           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 553) extern void _m_PI_5           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 554) extern void _m_PI_6           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 555) extern void _m_1_PI           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 556) extern void _m_2_PI           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 557) extern void _m_3_PI           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 558) extern void _m_4_PI           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 559) extern void _m_5_PI           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 560) extern void _m_2PI            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 561) extern void _m_3PI            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 562) extern void _m_1_2PI          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 563) extern void _m_1_3PI          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 564) extern void _m_1_4PI          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 565) extern void _m_1_5PI          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 566) extern void _m_1_6PI          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 567) extern void _m_3PI_4          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 568) extern void _m_SQRTPI         ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 569) extern void _m_1_SQRTPI       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 570) extern void _m_2_SQRTPI       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 571) extern void _m_SQRT2          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 572) extern void _m_1_SQRT2        ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 573) extern void _m_SQRT3          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 574) extern void _m_1_SQRT3        ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 575) extern void _m_DEGREE         ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 576) extern void _m_1_DEGREE       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 577) extern void _m_GOLDENRATIO    ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 578) extern void _m_EULERGAMMA     ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 579) extern void _m_CATALAN        ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 580) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 581) extern void _ind              ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 582) extern int  _is_ind           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 583) extern void _nan              ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 584) extern int  _is_nans          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 585) extern void _nan_max          ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 586) extern int  _is_nan_max       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 587) extern void _nan_min          ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 588) extern int  _is_nan_min       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 589) extern void _inf              ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 590) extern int  _is_inf           ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 591) extern void _real_min         ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 592) extern void _real_max         ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 593) extern void _signull          ( mpu_real *c, unsigned int sign, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 594) extern int  _is_signull       ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 595) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 596) extern void r_neg             ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 597) extern int  r_is_neg          ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 598) extern void r_abs             ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 599) extern int  r_sign            ( mpu_real *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 600) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 601) extern int  r_cmp             ( mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 602) extern void r_cpy             ( mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 603) extern void r_cvt             ( mpu_real *a, mpu_real *b, int nb_a, int nb_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300 604) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 605) extern void r_add             ( mpu_real *c, mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 606) extern void r_sub             ( mpu_real *c, mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 607) extern void r_mul             ( mpu_real *c, mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 608) extern void r_div             ( mpu_real *c, mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 609) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 610) extern void ltor              ( mpu_real *r, mpu_int *l, int nb_r, int nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300 611) extern void ultor             ( mpu_real *r, mpu_int *l, int nb_r, int nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300 612) extern void rtol_frac         ( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 613) extern void rtoul_frac        ( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 614) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 615) extern void r_remain          ( mpu_real *r, mpu_real *a, mpu_real *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 616) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 617) extern void r_floor           ( mpu_real *c, mpu_real *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 618) extern void r_ceil            ( mpu_real *c, mpu_real *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 619) extern void r_round           ( mpu_real *c, mpu_real *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 620) extern void r_frexp           ( mpu_real *s, mpu_int *lexp, mpu_real *r, int nb_l, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 621) extern void r_ldexp           ( mpu_real *c, mpu_real *r, mpu_int *lpwr2, int nb_r, int nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300 622) extern void r_logb            ( mpu_int *lbase2, mpu_real *r, int nb_l, int nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300 623) extern void r_modf            ( mpu_real *fract, mpu_real *integer, mpu_real *r, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 624) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 625) extern void r_sqrt            ( mpu_real *c, mpu_real *a, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 626) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 627) extern void r_sin             ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 628) extern void r_cos             ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 629) extern void r_tan             ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 630) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 631) extern void r_log1p           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 632) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 633) extern void r_log             ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 634) extern void r_log10           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 635) extern void r_log2            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 637) extern void r_expm1           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 638) extern void r_exp             ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 640) extern void r_atan2           ( mpu_real *c, mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 641) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 642) extern void r_sinh            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 643) extern void r_cosh            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 644) extern void r_tanh            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 645) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 646) extern void r_asinh           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 647) extern void r_acosh           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 648) extern void r_atanh           ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 649) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 650) extern void r_asin            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 651) extern void r_acos            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 652) extern void r_atan            ( mpu_real *y, mpu_real *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 653) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 654) extern void r_pow             ( mpu_real *c, mpu_real *x, mpu_real *y, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 655) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 656) extern void r_hypot           ( mpu_real *c, mpu_real *x, mpu_real *y, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 657) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 659) #define _ASCII_TO_REAL_ERROR  (-1) /* error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 660) #define _LONGHAND_REAL_NUMBER   0  /* прочитано простое число (типа 1e1) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 661) #define _REAL_PART_OF_COMPLEX   1  /* прочитана вещественная часть комплексного числа (типа 1r1) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 662) #define _IMAGINARY_OF_COMPLEX   2  /* прочитана мнимая часть комплексного числа (типа 1i1, 1j1) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 663) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 664) extern int  ascii_to_real     ( mpu_real *c, __mpu_char8_t *s, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 665) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 666) extern void real_to_ascii     ( __mpu_char8_t *s, mpu_real *c,
868b2b66 (kx 2024-12-20 16:11:07 +0300 667)                                 int ndigs, int exp_delim, int exp_digs, int gen_plus, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 668) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 669) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 670) extern void c_real_part       ( mpu_real *r, mpu_complex *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 671) extern void c_imaginary       ( mpu_real *r, mpu_complex *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 672) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 673) extern void c_real_to_complex ( mpu_complex *c, mpu_real *r, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 674) extern void c_gen_complex     ( mpu_complex *c, mpu_real *r, mpu_real *j, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 675) extern void c_polar           ( mpu_complex *c, mpu_real *rho, mpu_real *theta, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 676) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 677) extern void c_conj            ( mpu_complex *c, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 678) extern void c_abs             ( mpu_real *r, mpu_complex *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 679) extern void c_norm            ( mpu_real *r, mpu_complex *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 680) extern void c_arg             ( mpu_real *r, mpu_complex *c, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 681) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 682) extern int  c_is_equal        ( mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 683) extern int  c_is_nequal       ( mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 684) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 685) extern void c_cpy             ( mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 686) extern void c_cvt             ( mpu_complex *a, mpu_complex *b, int nb_a, int nb_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300 687) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 688) extern void c_add             ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 689) extern void c_sub             ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 690) extern void c_mul             ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 691) extern void c_div             ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 692) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 693) extern void c_exp             ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 694) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 695) extern void c_sin             ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 696) extern void c_cos             ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 697) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 698) extern void c_sinh            ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 699) extern void c_cosh            ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 700) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 701) extern void c_log             ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 702) extern void c_pow             ( mpu_complex *y, mpu_complex *x, mpu_complex *p, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 703) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 704) extern void c_sqrt            ( mpu_complex *y, mpu_complex *x, int nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300 705) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 707) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 708) #ifdef  __cplusplus
868b2b66 (kx 2024-12-20 16:11:07 +0300 709) }   /* ... extern "C" */
868b2b66 (kx 2024-12-20 16:11:07 +0300 710) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 711) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 712) #endif /* __LIB_MPU_H */