# MATH ユーティリティ関数群

## 構文

      #include <nitro/math.h>

      static inline int MATH_IAbs( int a );
      static inline int MATH_IMin( int a, int b );
      static inline int MATH_IMax( int a, int b );
      MATH_ABS( a );
      MATH_MIN( a, b );
      MATH_MAX( a, b );
      MATH_CLAMP( x, low, high );
      MATH_ROUNDUP( x, base );
      MATH_ROUNDDOWN( x, base );
      MATH_ROUNDUP32( x );
      MATH_ROUNDDOWN32( x );

## 説明

ユーティリティ関数群です。

MATH_IAbs | int 型の引数の絶対値を返すインライン関数です。
MATH_IMin | 2つの int 型の引数のうち、小さいほうを返すインライン関数です。
MATH_IMax | 2つの int 型の引数のうち、大きいほうを返すインライン関数です。
MATH_ABS | 引数の絶対値を返す関数マクロです。 各引数が2回評価される場合がありますので、副作用のある式を引数に入れてはいけません。
MATH_MIN | 2 引数のうち、小さいほうを返す関数マクロです。 各引数が2回評価される場合がありますので、副作用のある式を引数に入れてはいけません。
MATH_MAX | 2 引数のうち、大きいほうを返す関数マクロです。 各引数が2回評価される場合がありますので、副作用のある式を引数に入れてはいけません。
MATH_CLAMP | 引数をlowからhighの範囲に収めた値を返す関数マクロです。 各引数が2回評価される場合がありますので、副作用のある式を引数に入れてはいけません。
MATH_ROUNDUP | 第1引数 x を第2引数 base の倍数に切り上げた値を返す関数マクロです。すなわち x 以上の最小の base の倍数を返します。base は 2 のべき乗でなければなりません。
MATH_ROUNDDOWN | 第1引数 x を第2引数 base の倍数に切り下げた値を返す関数マクロです。すなわち x 以下の最大の base の倍数を返します。base は 2 のべき乗でなければなりません。
MATH_ROUNDUP32 | 引数を32の倍数に切り上げた値を返す関数マクロです。MATH_ROUNDUP(x, 32) と等価です。
MATH_ROUNDDOWN32 | 引数を32の倍数に切り下げた値を返す関数マクロです。MATH_ROUNDDOWN(x, 32) と等価です。

    #define MATH_ABS(a) ( ( (a) < 0 ) ? (-(a)) : (a) )
    #define MATH_MIN(a,b) (((a) <= (b)) ? (a) : (b))
    #define MATH_MAX(a,b) (((a) >= (b)) ? (a) : (b))
    #define MATH_CLAMP(x, low, high) ( ( (x) > (high) ) ? (high) : ( ( (x) < (low) ) ? (low) : (x) ) )
    #define MATH_ROUNDUP(x, base)   (((x) + ((base)-1)) & ~((base)-1))
    #define MATH_ROUNDDOWN(x, base) ((x) & ~((base)-1))
    #define MATH_ROUNDUP32(x)   MATH_ROUNDUP(x, 32)
    #define MATH_ROUNDDOWN32(x) MATH_ROUNDDOWN(x, 32)

## 参照

`なし`

## 履歴

2005/06/02 & を &amp; に修正
2004/12/14 初版