JZsdk_math.h 2.1 KB
/**
 ********************************************************************
 * @file   JZsdk_math.h
 *          用于文件系统操作
 *
 *********************************************************************
 */

/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_MATH_H
#define JZSDK_MATH_H

/* Includes ------------------------------------------------------------------*/
#include <stddef.h>
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/


/* Exported types ------------------------------------------------------------*/


/* Exported functions --------------------------------------------------------*/
#define JZ_MATH_MAX(a, b) ((a) > (b) ? (a) : (b))  //比较大小
#define JZ_MATH_MIN(a, b) ((a) < (b) ? (a) : (b))  //比较大小
#define JZ_MATH_ADD(a, b) ((a) + (b))  //相加
#define JZ_MATH_SUB(a, b) ((a) - (b))  //相减
#define JZ_MATH_MUL(a, b) ((a) * (b))    //相乘
#define JZ_MATH_DIVIDE(a, b) ((b) != 0 ? (a) / (b) : (-1))  //相除
#define JZ_MATH_MODULUS(a, b) ((b) != 0 ? (a) % (b) : (-1))  //求余
#define JZ_MATH_ABS(a) ((a) < 0 ? -(a) : (a)) //求绝对值
#define JZ_MATH_SQUARE(a) ((a) * (a)) //求平方
#define JZ_MATH_CUBE(a) ((a) * (a) * (a)) //求立方

// 注意:这个宏只适用于正整数幂且幂次较小的情况  
#define JZ_MATH_POW(base, exponent) ((exponent) == 0 ? 1 : ((base) * JZ_MATH_POW(base, (exponent) - 1)))  
// 使用递归,对于大幂次或浮点数幂次,建议使用math.h中的pow函数

// #include <math.h>  
// #define JZ_MATH_SQRT(a) sqrt(a)

#define JZ_MATH_CLAMP(value, min, max) ((value) < (min) ? (min) : ((value) > (max) ? (max) : (value))) //限制值在范围内(确保一个值在指定的最小值和最大值之间):
#define JZ_MATH_SWAP(a, b) do { typeof(a) temp = (a); (a) = (b); (b) = temp; } while (0) //交换两个变量的值(这个宏使用了一个临时变量,但它仍然是通过宏来完成的):


#ifdef __cplusplus
}
#endif

#endif