author: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300
committer: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300
commit: 868b2b66b564b5c00e3a74d10be45db7151627ac
parent: cce2ae8d3312493b7653358bb4af201d3271377b
Commit Summary:
Diffstat:
1 file changed, 549 insertions, 0 deletions
diff --git a/include/libmpu.h.in b/include/libmpu.h.in
new file mode 100644
index 0000000..5057481
--- /dev/null
+++ b/include/libmpu.h.in
@@ -0,0 +1,686 @@
+
+#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 );
+
+
+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 );
+
+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 );
+
+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 );
+
+
+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 );
+
+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 );
+
+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 */