215 lines
8.3 KiB
C
215 lines
8.3 KiB
C
/* ##H_FILE#
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
FILE : MTH_Real.h
|
|
MODULE : MTH (Common Mathematic Library)
|
|
|
|
DESCRIPTION : Real definitions
|
|
|
|
VERSION : MTH V5.0.13 / Alexandre LANGER [ALX] Ubi R&D / Add Comments
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
*/
|
|
|
|
#ifndef MTH_REAL_H
|
|
#define MTH_REAL_H
|
|
|
|
/* ##INCLUDE#----------------------------------------------------------------------------
|
|
Includes Files
|
|
---------------------------------------------------------------------------------------*/
|
|
#include "MTH_def.h"
|
|
|
|
|
|
/* ##TYPEDEF#----------------------------------------------------------------------------
|
|
Types definition
|
|
---------------------------------------------------------------------------------------*/
|
|
|
|
/* ##-#################################
|
|
## Define different Real Definition
|
|
#################################### */
|
|
typedef long MTH_tdxFixed16_16; /* Fixed real number type [16:16] */
|
|
typedef float MTH_tdxFloat; /* Float real number type */
|
|
typedef double MTH_tdxDouble; /* Double real number type */
|
|
|
|
|
|
/* ##-####################################
|
|
## Now decide witch one to use as Real
|
|
####################################### */
|
|
#ifdef MTH_RealIsFixed16_16
|
|
typedef MTH_tdxFixed16_16 MTH_tdxReal;
|
|
#include "MTH_fx16.h"
|
|
#endif /* MTH_RealIsFixed16_16 */
|
|
|
|
#ifdef MTH_RealIsFloat
|
|
typedef MTH_tdxFloat MTH_tdxReal;
|
|
#include "MTH_flt.h"
|
|
#endif /* MTH_RealIsFloat */
|
|
|
|
#ifdef MTH_RealIsDouble
|
|
typedef MTH_tdxDouble MTH_tdxReal;
|
|
#include "MTH_dble.h"
|
|
#endif /* MTH_RealIsDouble */
|
|
|
|
|
|
|
|
|
|
|
|
/* ##MACRO#----------------------------------------------------------------------------
|
|
MACRO definition
|
|
---------------------------------------------------------------------------------------*/
|
|
|
|
/* ##-#################################
|
|
## Real Conversions
|
|
#################################### */
|
|
|
|
/* Fixed16_16 to Others : */
|
|
#define MTH_M_xFixed16_16ToFixed16_16( X ) \
|
|
(X)
|
|
|
|
#define MTH_M_xFixed16_16ToFloat( X ) \
|
|
(float) ( (X) / 65536.0F )
|
|
|
|
#define MTH_M_xFixed16_16ToDouble( X ) \
|
|
(double) ( (X) / 65536.0 )
|
|
|
|
#define MTH_M_xFixed16_16ToLong( X ) \
|
|
(long)( (float) (X) / 65536.0F )
|
|
|
|
/* Float to Others : */
|
|
#define MTH_M_xFloatToFixed16_16( X ) \
|
|
(long)( (X) * 65536.0F )
|
|
|
|
#define MTH_M_xFloatToFloat( X ) \
|
|
(X)
|
|
|
|
#define MTH_M_xFloatToDouble( X ) \
|
|
(double) (X)
|
|
|
|
#ifdef MTH_OPTIMIZE
|
|
#define MTH_M_xFloatToLong MTH_M_xRealToLongOpt
|
|
#else /* NOT MTH_OPTIMIZE */
|
|
#define MTH_M_xFloatToLong( X ) \
|
|
(long) ( X )
|
|
#endif /* MTH_OPTIMIZE */
|
|
|
|
|
|
/* Double to Others : */
|
|
#define MTH_M_xDoubleToFixed16_16( X ) \
|
|
(long) ( (X) * 65536.0 )
|
|
|
|
#define MTH_M_xDoubleToFloat( X ) \
|
|
(float) (X)
|
|
|
|
#define MTH_M_xDoubleToDouble( X ) \
|
|
(X)
|
|
|
|
#define MTH_M_xDoubleToLong( X ) \
|
|
(long) ( X )
|
|
|
|
/* Long to Others : */
|
|
#define MTH_M_xLongToFixed16_16( X ) \
|
|
(long) ( (X) * 65536 )
|
|
|
|
#define MTH_M_xLongToFloat( X ) \
|
|
(float) (X)
|
|
|
|
#define MTH_M_xLongToDouble( X ) \
|
|
(double) (X)
|
|
|
|
#define MTH_M_xLongToLong( X ) \
|
|
(long)( X )
|
|
|
|
|
|
/* Common Real definition : */
|
|
|
|
#ifdef MTH_RealIsFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xRealToFixed16_16
|
|
DESCRIPTION : Convert real to fixed 16:16
|
|
INPUT : a : MTH_tdxReal
|
|
OUTPUT : (fixed16:16)(a) : MTH_tdxFixed16_16
|
|
=======================================================================================*/
|
|
#define MTH_M_xRealToFixed16_16 MTH_M_xFloatToFixed16_16
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xRealToFloat
|
|
DESCRIPTION : Convert real to float
|
|
INPUT : a : MTH_tdxReal
|
|
OUTPUT : (float)(a) : MTH_tdxFloat
|
|
=======================================================================================*/
|
|
#define MTH_M_xRealToFloat MTH_M_xFloatToFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xRealToDouble
|
|
DESCRIPTION : Convert real to double
|
|
INPUT : a : MTH_tdxReal
|
|
OUTPUT : (double)(a) : MTH_tdxDouble
|
|
=======================================================================================*/
|
|
#define MTH_M_xRealToDouble MTH_M_xFloatToDouble
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xFixed16_16ToReal
|
|
DESCRIPTION : Convert fixed 16:16 to real
|
|
INPUT : a : MTH_tdxFixed16_16
|
|
OUTPUT : (real)(a) : MTH_tdxReal
|
|
=======================================================================================*/
|
|
#define MTH_M_xFixed16_16ToReal MTH_M_xFixed16_16ToFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xFloatToReal
|
|
DESCRIPTION : Convert float to real
|
|
INPUT : a : MTH_tdxFloat
|
|
OUTPUT : (real)(a) : MTH_tdxReal
|
|
=======================================================================================*/
|
|
#define MTH_M_xFloatToReal MTH_M_xFloatToFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xDoubleToReal
|
|
DESCRIPTION : Convert double to real
|
|
INPUT : a : MTH_tdxDouble
|
|
OUTPUT : (real)(a) : MTH_tdxReal
|
|
=======================================================================================*/
|
|
#define MTH_M_xDoubleToReal MTH_M_xDoubleToFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xLongToReal
|
|
DESCRIPTION : Convert long to real
|
|
INPUT : a : long
|
|
OUTPUT : (real)(a) : MTH_tdxReal
|
|
=======================================================================================*/
|
|
#define MTH_M_xLongToReal MTH_M_xLongToFloat
|
|
|
|
/* ##M==================================================================================
|
|
NAME : MTH_M_xRealToLong
|
|
DESCRIPTION : Convert real to long
|
|
INPUT : a : MTH_tdxReal
|
|
OUTPUT : (long)(a) : long
|
|
=======================================================================================*/
|
|
#define MTH_M_xRealToLong MTH_M_xFloatToLong
|
|
|
|
#endif /* MTH_RealIsFloat */
|
|
|
|
|
|
#ifdef MTH_RealIsDouble
|
|
#define MTH_M_xRealToFixed16_16 MTH_M_xDoubleToFixed16_16
|
|
#define MTH_M_xRealToFloat MTH_M_xDoubleToFloat
|
|
#define MTH_M_xRealToDouble MTH_M_xDoubleToDouble
|
|
#define MTH_M_xFixed16_16ToReal MTH_M_xFixed16_16ToDouble
|
|
#define MTH_M_xFloatToReal MTH_M_xFloatToDouble
|
|
#define MTH_M_xDoubleToReal MTH_M_xDoubleToDouble
|
|
#define MTH_M_xLongToReal MTH_M_xLongToDouble
|
|
#define MTH_M_xRealToLong MTH_M_xDoubleToLong
|
|
#endif /* MTH_RealIsDouble */
|
|
|
|
#ifdef MTH_RealIsFixed16_16
|
|
#define MTH_M_xRealToFixed16_16 MTH_M_xFixed16_16ToFixed16_16
|
|
#define MTH_M_xRealToFloat MTH_M_xFixed16_16ToFloat
|
|
#define MTH_M_xRealToDouble MTH_M_xFixed16_16ToDouble
|
|
#define MTH_M_xFixed16_16ToReal MTH_M_xFixed16_16ToFixed16_16
|
|
#define MTH_M_xFloatToReal MTH_M_xFloatToFixed16_16
|
|
#define MTH_M_xDoubleToReal MTH_M_xDoubleToFixed16_16
|
|
#define MTH_M_xLongToReal MTH_M_xLongToFixed16_16
|
|
#define MTH_M_xRealToLong MTH_M_xFixed16_16ToLong
|
|
#endif /* MTH_RealIsFixed16_16 */
|
|
|
|
#endif /* MTH_REAL_H */
|