#ifndef __LIB_MPU_H #define __LIB_MPU_H #ifdef __cplusplus extern "C" { #endif #define MPU_REAL_IO_LIMIT @LIBMPU_REAL_IO_LIMIT@ #define MPU_MATH_FN_LIMIT @LIBMPU_REAL_MATH_F_LIMIT@ #define MPU_BYTE_ORDER @GCC_BYTE_ORDER@ #define MPU_BYTE_ORDER_BIG_ENDIAN @GCC_BYTE_ORDER_BIG_ENDIAN@ #define MPU_BYTE_ORDER_LITTLE_ENDIAN @GCC_BYTE_ORDER_LITTLE_ENDIAN@ #define MPU_WORD_ORDER @GCC_FLOAT_WORD_ORDER@ #define MPU_WORD_ORDER_BIG_ENDIAN @GCC_FLOAT_WORD_ORDER_BIG_ENDIAN@ #define MPU_WORD_ORDER_LITTLE_ENDIAN @GCC_FLOAT_WORD_ORDER_LITTLE_ENDIAN@ #define BITS_PER_MACHINE_REGISTER @MACHINE_REGISTER_WIDTH@ /****************************************** Minimal addressible UNIT of information: */ typedef @GCC_UINT8_TYPE@ __mpu_UNIT_t; /* unsigned UNIT */ typedef @GCC_INT8_TYPE@ __mpu_SUNIT_t; /* signed UNIT */ #define BITS_PER_UNIT_T @GCC_CHAR_WIDTH@ typedef @GCC_UINT8_TYPE@ __mpu_byte_t; /* unsigned byte */ typedef @GCC_INT8_TYPE@ __mpu_sbyte_t; /* signed byte */ #define BITS_PER_BYTE_T @GCC_CHAR_WIDTH@ /********** ADDRESS: */ typedef @GCC_UINTPTR_TYPE@ __mpu_address_t; /* unsigned ADDRESS */ typedef @GCC_UINTPTR_TYPE@ __mpu_saddress_t; /* signed DIFFADDRESS */ /******************************* Signed DIFFerence of two PTR: */ typedef @GCC_PTRDIFF_TYPE@ __mpu_ptrdiff_t; /* signed PTRDIFF */ /************* SIZE types: */ typedef @GCC_SIZE_TYPE@ __mpu_size_t; /* unsigned SIZE */ typedef @GCC_INTMAX_TYPE@ __mpu_ssize_t; /* signed SIZE: is type of a byte count, or error. */ /***************************** COUNTER is always unsigned: */ typedef __mpu_size_t __mpu_count_t; /*************************** ERRNO is always signed: */ typedef int __mpu_error_t; /******* VOID: */ #define __mpu_void_t void #define __mpu_UINT32_C(c) c ## @LIBMPU_UINT32_CONST_SUFFIX@ #define __mpu_UINT64_C(c) c ## @LIBMPU_UINT64_CONST_SUFFIX@ /*************************************************************** Тип данных, используемый для операций с выровненной памятью. Беззнаковый( 32 bits ). ***************************************************************/ #define __mem_op_t @GCC_UINT32_TYPE@ #define MEM_OP_SIZE (sizeof(__mem_op_t)) #define MEM_OP_BYTES 4 #define MEM_OP_BITS 32 /********************************* Base data types: */ typedef @GCC_INT8_TYPE@ __mpu_int8_t; typedef @GCC_UINT8_TYPE@ __mpu_uint8_t; typedef @GCC_INT16_TYPE@ __mpu_int16_t; typedef @GCC_UINT16_TYPE@ __mpu_uint16_t; typedef @GCC_INT32_TYPE@ __mpu_int32_t; typedef @GCC_UINT32_TYPE@ __mpu_uint32_t; typedef @GCC_INT64_TYPE@ __mpu_int64_t; typedef @GCC_UINT64_TYPE@ __mpu_uint64_t; /******* REAL: */ typedef float __mpu_real32_t; typedef double __mpu_real64_t; /********************************* CHAR types are always unsigned: */ typedef @GCC_UINT8_TYPE@ __mpu_char8_t; typedef @GCC_UINT16_TYPE@ __mpu_char16_t; typedef @GCC_UINT32_TYPE@ __mpu_char32_t; /********************************************************* UTF-8, UCS2, UCS4 types. UTF-8 CHAR is always unsigned: */ typedef @GCC_UINT8_TYPE@ __mpu_utf8_t; typedef @GCC_UINT16_TYPE@ __mpu_ucs2_t; typedef @GCC_UINT32_TYPE@ __mpu_ucs4_t; /********************************************************* Always signed with a size larger than any type of char: */ typedef @GCC_INT64_TYPE@ __mpu_int_c; extern void __mpu_init( void ); extern void __mpu_free_context( void ); /******************************************************** Error numbers: */ extern __mpu_error_t *__ptr_integer_error_no( void ); extern __mpu_error_t *__ptr_real_error_no ( void ); extern __mpu_error_t *__ptr_complex_error_no( void ); extern __mpu_error_t *__ptr_math_error_no ( void ); #define __mpu_integer_error_no (*__ptr_integer_error_no()) #define __mpu_real_error_no (*__ptr_real_error_no()) #define __mpu_complex_error_no (*__ptr_complex_error_no()) #define __mpu_math_error_no (*__ptr_math_error_no()) extern __mpu_error_t *__ptr_extra_warnings ( void ); #define __mpu_extra_warnings (*__ptr_extra_warnings()) extern void __mpu_clear_iflags( void ); extern void __mpu_clear_rflags( void ); extern void __mpu_clear_mflags( void ); /* Get integer flags: */ extern int __mpu_gta( void ); extern int __mpu_gtc( void ); extern int __mpu_gto( void ); extern int __mpu_gts( void ); extern int __mpu_gtp( void ); extern int __mpu_gtz( void ); extern int __mpu_gtr( void ); extern int __mpu_gtv( void ); /* Set integer flags: */ extern void __mpu_sta( void ); extern void __mpu_stc( void ); extern void __mpu_sto( void ); extern void __mpu_sts( void ); extern void __mpu_stp( void ); extern void __mpu_stz( void ); extern void __mpu_str( void ); extern void __mpu_stv( void ); /* Clear integer flags: */ extern void __mpu_cla( void ); extern void __mpu_clc( void ); extern void __mpu_clo( void ); extern void __mpu_cls( void ); extern void __mpu_clp( void ); extern void __mpu_clz( void ); extern void __mpu_clr( void ); extern void __mpu_clv( void ); /* Complement integer flags: */ extern void __mpu_cma( void ); extern void __mpu_cmc( void ); extern void __mpu_cmo( void ); extern void __mpu_cms( void ); extern void __mpu_cmp( void ); extern void __mpu_cmz( void ); extern void __mpu_cmr( void ); extern void __mpu_cmv( void ); /* Get real flags: */ extern int __mpu_gtdom( void ); extern int __mpu_gtsng( void ); extern int __mpu_gtovf( void ); extern int __mpu_gtudf( void ); extern int __mpu_gttls( void ); extern int __mpu_gtpls( void ); extern int __mpu_gtind( void ); extern int __mpu_gtinx( void ); /* Set real flags: */ extern void __mpu_stdom( void ); extern void __mpu_stsng( void ); extern void __mpu_stovf( void ); extern void __mpu_studf( void ); extern void __mpu_sttls( void ); extern void __mpu_stpls( void ); extern void __mpu_stind( void ); extern void __mpu_stinx( void ); /* Clear real flags: */ extern void __mpu_cldom( void ); extern void __mpu_clsng( void ); extern void __mpu_clovf( void ); extern void __mpu_cludf( void ); extern void __mpu_cltls( void ); extern void __mpu_clpls( void ); extern void __mpu_clind( void ); extern void __mpu_clinx( void ); /* Complement real flags: */ extern void __mpu_cmdom( void ); extern void __mpu_cmsng( void ); extern void __mpu_cmovf( void ); extern void __mpu_cmudf( void ); extern void __mpu_cmtls( void ); extern void __mpu_cmpls( void ); extern void __mpu_cmind( void ); extern void __mpu_cminx( void ); /******************************************************** Math ERRNO declarations: */ #define MPU_MATH_ERROR_MSG_SIZE 4096 #define __EUNKNOWN__ 0 /* unknown error type (for all sources) */ /********************** Integer error types: */ #define __I_ESIZE__ 1 /* Invalid size of operand(s) */ #define __I_ESHIFT__ 2 /* Invalid number of shifts */ #define __I_ENUMBER__ 3 /* Invalid number */ #define __I_ERADIX__ 4 /* Invalid radix */ #define __I_MAX_ERRNO 5 /******************* Real error types: */ #define __R_ESIZE__ 1 /* Invalid size of operand(s) */ #define __R_ETRUNC__ 2 /* Invalid number of TRUNC bits(BZ) */ #define __R_MAX_ERRNO 3 /********************** Complex error types: */ #define __C_EDIVZEROBYZERO__ 1 /* Complex attempted division by zero */ #define __C_ELOGOFZERO__ 2 /* Complex attempted LOG of zero magnitude number */ #define __C_EPOWOFZERO__ 3 /* Complex attempted POW of zero magnitude number */ #define __C_MAX_ERRNO 4 /******************* Math error types: */ #define __DOMAIN__ 1 /* argument domain error */ #define __SING__ 2 /* argument singularity */ #define __OVERFLOW__ 3 /* overflow range error */ #define __UNDERFLOW__ 4 /* underflow range error */ #define __TLOSS__ 5 /* total loss of precision */ #define __PLOSS__ 6 /* partial loss of precision */ #define __INVALID__ 7 /* -InD - produsing operation */ #define __INEXACT__ 8 /* inexact result of operation */ #define __M_MAX_ERRNO 9 /******************* Struct Exception: */ /*** __exception.who - источник ошибки. ************************************/ #define _UNKNOWN_ 4 #define _COMPLEX_ 3 #define _REAL_ 2 #define _INTEGER_ 1 #define _MATH_ 0 /*** __exception.msg_type - тип сообщения. ***************************************/ #define _MSG_ 2 #define _ERROR_MSG_ 1 #define _WARNING_MSG_ 0 struct __exception { int who; /* _COMPLEX_, _REAL_, _INTEGER_, _MATH_ */ int type; __mpu_char8_t *name; __mpu_char8_t *msg; int msg_type; /* >= 1 - error, 0 - warning */ int nb_a1; /* number of bytes in arg_1 */ int nb_a2; /* number of bytes in arg_2 */ int nb_rv; /* number of bytes in return_value */ unsigned char *arg_1; unsigned char *arg_2; unsigned char *return_value; }; extern __mpu_utf8_t * __mpu_utf8mpu_error( int who, __mpu_error_t errnum ); extern int __use_default_math_error; extern int __mpu_math_error( struct __exception *pexcept ); extern int __use_default_mpu_warning; extern void __mpu_warning( struct __exception *pexcept ); /*************************************************************** Размер данных в байтах: ***************************************************************/ /********* integer ****** = ************************/ #define NB_I8 1 #define NB_I16 2 #define NB_I32 4 #define NB_I64 8 #define NB_I128 16 #define NB_I256 32 #define NB_I512 64 #define NB_I1024 128 #define NB_I2048 256 #define NB_I4096 512 #define NB_I8192 1024 #define NB_I16384 2048 #define NB_I32768 4096 #define NB_I65536 8192 #define NB_I_MAX 8192 /********* real ********* = ************************/ #define NB_R32 4 #define NB_R64 8 #define NB_R128 16 #define NB_R256 32 #define NB_R512 64 #define NB_R1024 128 #define NB_R2048 256 #define NB_R4096 512 #define NB_R8192 1024 #define NB_R16384 2048 #define NB_R32768 4096 #define NB_R65536 8192 #define NB_R_MAX 8192 /********* complex ****** = ************************/ #define NB_C32 4 #define NB_C64 8 #define NB_C128 16 #define NB_C256 32 #define NB_C512 64 #define NB_C1024 128 #define NB_C2048 256 #define NB_C4096 512 #define NB_C8192 1024 #define NB_C16384 2048 #define NB_C32768 4096 #define NB_C65536 8192 #define NB_C_MAX 8192 typedef __mpu_byte_t mpu_int; /* integer number */ typedef __mpu_byte_t mpu_real; /* real number */ typedef __mpu_byte_t mpu_complex; /* complex number */ typedef __mpu_byte_t *mpu_p_num; /* pointer to number */ /*************************************************************** INTEGER DATA TYPES ***************************************************************/ typedef __mpu_byte_t mpu_int8_t[1]; typedef __mpu_byte_t mpu_int16_t[2]; typedef __mpu_byte_t mpu_int32_t[4]; typedef __mpu_byte_t mpu_int64_t[8]; typedef __mpu_byte_t mpu_int128_t[16]; typedef __mpu_byte_t mpu_int256_t[32]; typedef __mpu_byte_t mpu_int512_t[64]; typedef __mpu_byte_t mpu_int1024_t[128]; typedef __mpu_byte_t mpu_int2048_t[256]; typedef __mpu_byte_t mpu_int4096_t[512]; typedef __mpu_byte_t mpu_int8192_t[1024]; typedef __mpu_byte_t mpu_int16384_t[2048]; typedef __mpu_byte_t mpu_int32768_t[4096]; typedef __mpu_byte_t mpu_int65536_t[8192]; typedef __mpu_byte_t mpu_wide_int_t[8192]; /*************************************************************** REAL DATA TYPES ***************************************************************/ typedef __mpu_byte_t mpu_real32_t[4]; typedef __mpu_byte_t mpu_real64_t[8]; typedef __mpu_byte_t mpu_real128_t[16]; typedef __mpu_byte_t mpu_real256_t[32]; typedef __mpu_byte_t mpu_real512_t[64]; typedef __mpu_byte_t mpu_real1024_t[128]; typedef __mpu_byte_t mpu_real2048_t[256]; typedef __mpu_byte_t mpu_real4096_t[512]; typedef __mpu_byte_t mpu_real8192_t[1024]; typedef __mpu_byte_t mpu_real16384_t[2048]; typedef __mpu_byte_t mpu_real32768_t[4096]; typedef __mpu_byte_t mpu_real65536_t[8192]; typedef __mpu_byte_t mpu_wide_real_t[8192]; /*************************************************************** COMPLEX DATA TYPES NOTE: Следует помнить, что при вызове функций, работающих с комплексными числами надо задавать не фактический, а половинный размер комплексных операндов ! SEE: following NB_C32, NB_C64, ..., NB_C1024 NB_C_MAX. ***************************************************************/ typedef __mpu_byte_t mpu_complex32_t[8]; typedef __mpu_byte_t mpu_complex64_t[16]; typedef __mpu_byte_t mpu_complex128_t[32]; typedef __mpu_byte_t mpu_complex256_t[64]; typedef __mpu_byte_t mpu_complex512_t[128]; typedef __mpu_byte_t mpu_complex1024_t[256]; typedef __mpu_byte_t mpu_complex2048_t[512]; typedef __mpu_byte_t mpu_complex4096_t[1024]; typedef __mpu_byte_t mpu_complex8192_t[2048]; typedef __mpu_byte_t mpu_complex16384_t[4096]; typedef __mpu_byte_t mpu_complex32768_t[8192]; typedef __mpu_byte_t mpu_complex65536_t[16384]; typedef __mpu_byte_t mpu_wide_complex_t[16384]; /*************************************************************** INTEGER ARITHMETIC OPERATIONS ***************************************************************/ extern void iadd ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void iadc ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void isub ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void isbb ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void ishl ( mpu_int *c, mpu_int *a, int nb ); extern void ishr ( mpu_int *c, mpu_int *a, int nb ); extern void isal ( mpu_int *c, mpu_int *a, int nb ); extern void isar ( mpu_int *c, mpu_int *a, int nb ); extern void irol ( mpu_int *c, mpu_int *a, int nb ); extern void iror ( mpu_int *c, mpu_int *a, int nb ); extern void ircl ( mpu_int *c, mpu_int *a, int nb ); extern void ircr ( mpu_int *c, mpu_int *a, int nb ); extern void ishln ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void ishrn ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void isaln ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void isarn ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void iroln ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void irorn ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void ircln ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void ircrn ( mpu_int *c, mpu_int *a, unsigned int ns, int nb ); extern void inot ( mpu_int *c, mpu_int *a, int nb ); extern void ineg ( mpu_int *c, mpu_int *a, int nb ); extern void iand ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void itest ( mpu_int *a, mpu_int *b, int nb ); extern void icmp ( mpu_int *a, mpu_int *b, int nb ); extern void ior ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void ixor ( mpu_int *c, mpu_int *a, mpu_int *b, int nb ); extern void iinc ( mpu_int *c, mpu_int *a, int nb ); extern void idec ( mpu_int *c, mpu_int *a, int nb ); extern void ixchg ( mpu_int *a, mpu_int *b, int nb ); extern void icpy ( mpu_int *c, mpu_int *a, int nb_c, int nb_a ); extern void icvt ( mpu_int *c, mpu_int *a, int nb_c, int nb_a ); extern void imul ( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num ); extern void ismul ( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num ); extern void idiv ( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, int nb ); extern void isdiv ( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, int nb ); /* for integer ...itoa() functions */ #define RADIX_BIN 2 #define RADIX_OCT 8 #define RADIX_DEC 10 #define RADIX_HEX 16 /* for integer ...itoa() functions and real ...rtoa() functions */ #define LOWERCASE 0 #define UPPERCASE 1 extern void iatoi ( mpu_int *c, __mpu_char8_t *str, int nb ); extern void iatoui ( mpu_int *c, __mpu_char8_t *str, int nb ); extern void iitoa ( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb ); extern void iuitoa ( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb ); /*************************************************************** REAL ARITHMETIC OPERATIONS ***************************************************************/ extern int _sizeof_exp ( int nb ); extern int _real_mant_digs ( int nb ); extern int _real_digs ( int nb ); extern int _real_max_string ( int nb ); extern void _real_epsilon ( mpu_real *c, int nb ); extern void _real_max_10_exp ( mpu_int *e, int nb_e, int nb_r ); extern void _real_min_10_exp ( mpu_int *e, int nb_e, int nb_r ); extern void _real_max_max_exp ( mpu_int *e, int nb_e, int nb_r ); extern void _real_max_exp ( mpu_int *e, int nb_e, int nb_r ); extern void _real_min_exp ( mpu_int *e, int nb_e, int nb_r ); extern void _m_zero ( mpu_real *c, int nb ); extern void _m_half ( mpu_real *c, int nb ); extern void _m_one ( mpu_real *c, int nb ); extern void _m_two ( mpu_real *c, int nb ); extern void _m_ten ( mpu_real *c, int nb ); extern void _m_mten ( mpu_real *c, int nb ); extern void _m_32 ( mpu_real *c, int nb ); extern void _m_PI ( mpu_real *c, int nb ); extern void _m_E ( mpu_real *c, int nb ); extern void _m_1_ln2 ( mpu_real *c, int nb ); extern void _m_ln2 ( mpu_real *c, int nb ); extern void _m_1_ln10 ( mpu_real *c, int nb ); extern void _m_ln10 ( mpu_real *c, int nb ); extern void _m_1_lg2 ( mpu_real *c, int nb ); extern void _m_lg2 ( mpu_real *c, int nb ); extern void _m_PI_2 ( mpu_real *c, int nb ); extern void _m_PI_3 ( mpu_real *c, int nb ); extern void _m_PI_4 ( mpu_real *c, int nb ); extern void _m_PI_5 ( mpu_real *c, int nb ); extern void _m_PI_6 ( mpu_real *c, int nb ); extern void _m_1_PI ( mpu_real *c, int nb ); extern void _m_2_PI ( mpu_real *c, int nb ); extern void _m_3_PI ( mpu_real *c, int nb ); extern void _m_4_PI ( mpu_real *c, int nb ); extern void _m_5_PI ( mpu_real *c, int nb ); extern void _m_2PI ( mpu_real *c, int nb ); extern void _m_3PI ( mpu_real *c, int nb ); extern void _m_1_2PI ( mpu_real *c, int nb ); extern void _m_1_3PI ( mpu_real *c, int nb ); extern void _m_1_4PI ( mpu_real *c, int nb ); extern void _m_1_5PI ( mpu_real *c, int nb ); extern void _m_1_6PI ( mpu_real *c, int nb ); extern void _m_3PI_4 ( mpu_real *c, int nb ); extern void _m_SQRTPI ( mpu_real *c, int nb ); extern void _m_1_SQRTPI ( mpu_real *c, int nb ); extern void _m_2_SQRTPI ( mpu_real *c, int nb ); extern void _m_SQRT2 ( mpu_real *c, int nb ); extern void _m_1_SQRT2 ( mpu_real *c, int nb ); extern void _m_SQRT3 ( mpu_real *c, int nb ); extern void _m_1_SQRT3 ( mpu_real *c, int nb ); extern void _m_DEGREE ( mpu_real *c, int nb ); extern void _m_1_DEGREE ( mpu_real *c, int nb ); extern void _m_GOLDENRATIO ( mpu_real *c, int nb ); extern void _m_EULERGAMMA ( mpu_real *c, int nb ); extern void _m_CATALAN ( mpu_real *c, int nb ); extern void _ind ( mpu_real *c, int nb ); extern int _is_ind ( mpu_real *c, int nb ); extern void _nan ( mpu_real *c, unsigned int sign, int nb ); extern int _is_nans ( mpu_real *c, int nb ); extern void _nan_max ( mpu_real *c, unsigned int sign, int nb ); extern int _is_nan_max ( mpu_real *c, int nb ); extern void _nan_min ( mpu_real *c, unsigned int sign, int nb ); extern int _is_nan_min ( mpu_real *c, int nb ); extern void _inf ( mpu_real *c, unsigned int sign, int nb ); extern int _is_inf ( mpu_real *c, int nb ); extern void _real_min ( mpu_real *c, unsigned int sign, int nb ); extern void _real_max ( mpu_real *c, unsigned int sign, int nb ); extern void _signull ( mpu_real *c, unsigned int sign, int nb ); extern int _is_signull ( mpu_real *c, int nb ); extern void r_neg ( mpu_real *c, int nb ); extern int r_is_neg ( mpu_real *c, int nb ); extern void r_abs ( mpu_real *c, int nb ); extern int r_sign ( mpu_real *c, int nb ); extern int r_cmp ( mpu_real *a, mpu_real *b, int nb ); extern void r_cpy ( mpu_real *a, mpu_real *b, int nb ); extern void r_cvt ( mpu_real *a, mpu_real *b, int nb_a, int nb_b ); extern void r_add ( mpu_real *c, mpu_real *a, mpu_real *b, int nb ); extern void r_sub ( mpu_real *c, mpu_real *a, mpu_real *b, int nb ); extern void r_mul ( mpu_real *c, mpu_real *a, mpu_real *b, int nb ); extern void r_div ( mpu_real *c, mpu_real *a, mpu_real *b, int nb ); extern void ltor ( mpu_real *r, mpu_int *l, int nb_r, int nb_l ); extern void ultor ( mpu_real *r, mpu_int *l, int nb_r, int nb_l ); extern void rtol_frac ( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r ); extern void rtoul_frac ( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r ); extern void r_remain ( mpu_real *r, mpu_real *a, mpu_real *b, int nb ); extern void r_floor ( mpu_real *c, mpu_real *a, int nb ); extern void r_ceil ( mpu_real *c, mpu_real *a, int nb ); extern void r_round ( mpu_real *c, mpu_real *a, int nb ); extern void r_frexp ( mpu_real *s, mpu_int *lexp, mpu_real *r, int nb_l, int nb_r ); extern void r_ldexp ( mpu_real *c, mpu_real *r, mpu_int *lpwr2, int nb_r, int nb_l ); extern void r_logb ( mpu_int *lbase2, mpu_real *r, int nb_l, int nb_r ); extern void r_modf ( mpu_real *fract, mpu_real *integer, mpu_real *r, int nb ); extern void r_sqrt ( mpu_real *c, mpu_real *a, int nb ); extern void r_sin ( mpu_real *y, mpu_real *x, int nb ); extern void r_cos ( mpu_real *y, mpu_real *x, int nb ); extern void r_tan ( mpu_real *y, mpu_real *x, int nb ); extern void r_log1p ( mpu_real *y, mpu_real *x, int nb ); extern void r_log ( mpu_real *y, mpu_real *x, int nb ); extern void r_log10 ( mpu_real *y, mpu_real *x, int nb ); extern void r_log2 ( mpu_real *y, mpu_real *x, int nb ); extern void r_expm1 ( mpu_real *y, mpu_real *x, int nb ); extern void r_exp ( mpu_real *y, mpu_real *x, int nb ); extern void r_atan2 ( mpu_real *c, mpu_real *y, mpu_real *x, int nb ); extern void r_sinh ( mpu_real *y, mpu_real *x, int nb ); extern void r_cosh ( mpu_real *y, mpu_real *x, int nb ); extern void r_tanh ( mpu_real *y, mpu_real *x, int nb ); extern void r_asinh ( mpu_real *y, mpu_real *x, int nb ); extern void r_acosh ( mpu_real *y, mpu_real *x, int nb ); extern void r_atanh ( mpu_real *y, mpu_real *x, int nb ); extern void r_asin ( mpu_real *y, mpu_real *x, int nb ); extern void r_acos ( mpu_real *y, mpu_real *x, int nb ); extern void r_atan ( mpu_real *y, mpu_real *x, int nb ); extern void r_pow ( mpu_real *c, mpu_real *x, mpu_real *y, int nb ); extern void r_hypot ( mpu_real *c, mpu_real *x, mpu_real *y, int nb ); #define _ASCII_TO_REAL_ERROR (-1) /* error */ #define _LONGHAND_REAL_NUMBER 0 /* прочитано простое число (типа 1e1) */ #define _REAL_PART_OF_COMPLEX 1 /* прочитана вещественная часть комплексного числа (типа 1r1) */ #define _IMAGINARY_OF_COMPLEX 2 /* прочитана мнимая часть комплексного числа (типа 1i1, 1j1) */ extern int ascii_to_real ( mpu_real *c, __mpu_char8_t *s, int nb ); extern void real_to_ascii ( __mpu_char8_t *s, mpu_real *c, int ndigs, int exp_delim, int exp_digs, int gen_plus, int nb ); extern void c_real_part ( mpu_real *r, mpu_complex *c, int nb ); extern void c_imaginary ( mpu_real *r, mpu_complex *c, int nb ); extern void c_real_to_complex ( mpu_complex *c, mpu_real *r, int nb ); extern void c_gen_complex ( mpu_complex *c, mpu_real *r, mpu_real *j, int nb ); extern void c_polar ( mpu_complex *c, mpu_real *rho, mpu_real *theta, int nb ); extern void c_conj ( mpu_complex *c, mpu_complex *x, int nb ); extern void c_abs ( mpu_real *r, mpu_complex *c, int nb ); extern void c_norm ( mpu_real *r, mpu_complex *c, int nb ); extern void c_arg ( mpu_real *r, mpu_complex *c, int nb ); extern int c_is_equal ( mpu_complex *a, mpu_complex *b, int nb ); extern int c_is_nequal ( mpu_complex *a, mpu_complex *b, int nb ); extern void c_cpy ( mpu_complex *a, mpu_complex *b, int nb ); extern void c_cvt ( mpu_complex *a, mpu_complex *b, int nb_a, int nb_b ); extern void c_add ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb ); extern void c_sub ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb ); extern void c_mul ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb ); extern void c_div ( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb ); extern void c_exp ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_sin ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_cos ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_sinh ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_cosh ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_log ( mpu_complex *y, mpu_complex *x, int nb ); extern void c_pow ( mpu_complex *y, mpu_complex *x, mpu_complex *p, int nb ); extern void c_sqrt ( mpu_complex *y, mpu_complex *x, int nb ); #ifdef __cplusplus } /* ... extern "C" */ #endif #endif /* __LIB_MPU_H */