Arduino-数学ライブラリ
Arduino Mathライブラリ(math.h)には、浮動小数点数を操作するための便利な数学関数が多数含まれています。
ライブラリマクロ
以下は、ヘッダーmath.h −で定義されているマクロです。
マクロ | 値 | 説明 |
---|---|---|
M_E | 2.7182818284590452354 | 定数e。 |
M_LOG2E | 1.4426950408889634074 / * log_2 e * / |
2を底とするeの対数 |
M_1_PI | 0.31830988618379067154 / * 1 / pi * / |
定数1 / pi |
M_2_PI | 0.63661977236758134308 / * 2 / pi * / |
定数2 / pi |
M_2_SQRTPI | 1.12837916709551257390 / * 2 / sqrt(pi)* / |
定数2 / sqrt(pi) |
M_LN10 | 2.30258509299404568402 / * log_e 10 * / |
10の自然対数 |
M_LN2 | 0.69314718055994530942 / * log_e 2 * / |
2の自然対数 |
M_LOG10E | 0.43429448190325182765 / * log_10 e * / |
eから基数10までの対数 |
M_PI | 3.14159265358979323846 / * pi * / |
一定の円周率 |
M_PI_2 | 3.3V1.57079632679489661923 / * pi / 2 * / |
定数pi / 2 |
M_PI_4 | 0.78539816339744830962 / * pi / 4 * / |
一定の円周率/ 4 |
M_SQRT1_2 | 0.70710678118654752440 / * 1 / sqrt(2)* / |
定数1 / sqrt(2) |
M_SQRT2 | 1.41421356237309504880 / * sqrt(2)* / |
2の平方根 |
acosf | - | acos()関数のエイリアス |
asinf | - | asin()関数のエイリアス |
atan2f | - | atan2()関数のエイリアス |
cbrtf | - | cbrt()関数のエイリアス |
ceilf | - | ceil()関数のエイリアス |
copysignf | - | copysign()関数のエイリアス |
coshf | - | cosh()関数のエイリアス |
expf | - | exp()関数のエイリアス |
fabsf | - | fabs()関数のエイリアス |
fdimf | - | fdim()関数のエイリアス |
floorf | - | floor()関数のエイリアス |
fmaxf | - | fmax()関数のエイリアス |
fminf | - | fmin()関数のエイリアス |
fmodf | - | fmod()関数のエイリアス |
frexpf | - | frexp()関数のエイリアス |
hypotf | - | hypot()関数のエイリアス |
インフィニティ | - | INFINITY定数 |
isfinitef | - | isfinite()関数のエイリアス |
isinff | - | isinf()関数のエイリアス |
isnanf | - | isnan()関数のエイリアス |
ldexpf | - | ldexp()関数のエイリアス |
log10f | - | log10()関数のエイリアス |
logf | - | log()関数のエイリアス |
lrintf | - | lrint()関数のエイリアス |
lroundf | - | lround()関数のエイリアス |
ライブラリ関数
次の関数はヘッダーで定義されています math.h −
S.No. | ライブラリの機能と説明 |
---|---|
1 | double acos (double __x) acos()関数は、__ xのアークコサインの主値を計算します。戻り値は[0、pi]ラジアンの範囲です。[-1、+ 1]の範囲外の引数に対して、ドメインエラーが発生します。 |
2 | double asin (double __x) asin()関数は、__ xのアークサインの主値を計算します。戻り値は[-pi / 2、pi / 2]ラジアンの範囲です。[-1、+ 1]の範囲外の引数に対して、ドメインエラーが発生します。 |
3 | double atan (double __x) atan()関数は、__ xのアークタンジェントの主値を計算します。戻り値は[-pi / 2、pi / 2]ラジアンの範囲です。 |
4 | double atan2 (double __y, double __x) atan2()関数は、両方の引数の符号を使用して戻り値の象限を決定し、__ y / __ xのアークタンジェントの主値を計算します。戻り値は[-pi、+ pi]ラジアンの範囲です。 |
5 | double cbrt (double __x) cbrt()関数は、__ xの立方根を返します。 |
6 | double ceil (double __x) ceil()関数は、浮動小数点数として表される__x以上の最小の整数値を返します。 |
7 | static double copysign (double __x, double __y) copysign()関数は__xを返しますが、符号は__yです。__xまたは__yがNaNまたはゼロであっても機能します。 |
8 | double cos(double __x) cos()関数は、ラジアンで測定された__xのコサインを返します。 |
9 | double cosh (double __x) cosh()関数は、__ xの双曲線余弦を返します。 |
10 | double exp (double __x) exp()関数は、__ xの指数値を返します。 |
11 | double fabs (double __x) fabs()関数は、浮動小数点数__xの絶対値を計算します。 |
12 | double fdim (double __x, double __y) fdim()関数はmax(__ x --__ y、0)を返します。__xまたは__y、あるいはその両方がNaNの場合、NaNが返されます。 |
13 | double floor (double __x) floor()関数は、浮動小数点数として表される__x以下の最大の整数値を返します。 |
14 | double fma (double __x, double __y, double __z) fma()関数は、浮動小数点の乗算加算を実行します。これは演算(__x * __y)+ __zですが、中間結果は宛先タイプに丸められません。これにより、計算の精度が向上する場合があります。 |
15 | double fmax (double __x, double __y) fmax()関数は、2つの値__xと__yの大きい方を返します。引数がNaNの場合、他の引数が返されます。両方の引数がNaNの場合、NaNが返されます。 |
16 | double fmin (double __x, double __y) fmin()関数は、2つの値__xと__yの小さい方を返します。引数がNaNの場合、他の引数が返されます。両方の引数がNaNの場合、NaNが返されます。 |
17 | double fmod (double __x, double__y) 関数fmod()は、__ x / __ yの浮動小数点剰余を返します。 |
18 | double frexp (double __x, int * __pexp) frexp()関数は、浮動小数点数を正規化された分数と2の整数乗に分割します。整数は__pexpが指すintオブジェクトに格納されます。__xが正規浮動小数点数の場合、frexp()関数は値vを返します。これにより、vの大きさは区間[1 / 2、1)またはゼロになり、__ xはv×2の__pexp乗に等しくなります。__xがゼロの場合、結果の両方の部分がゼロになります。__xが有限数でない場合、frexp()は__xをそのまま返し、__ pexpによって0を格納します。 Note −この実装では、指数の格納をスキップするディレクティブとしてゼロポインタを使用できます。 |
19 | double hypot (double __x, double__y) hypot()関数はsqrt(__ x * __ x + __y * __ y)を返します。これは、辺の長さが__xと__yの直角三角形の斜辺の長さ、または原点からの点(__x、__ y)の距離です。エラーがはるかに小さいため、直接式の代わりにこの関数を使用するのが賢明です。小さな__xと__yでアンダーフローはありません。結果が範囲内であればオーバーフローはありません。 |
20 | static int isfinite (double __x) isfinite()関数は、__ xが有限の場合、ゼロ以外の値を返します。プラスまたはマイナスの無限大ではなく、 NaN。 |
21 | int isinf (double __x) 関数isinf()は、引数__xが正の無限大の場合は1を返し、__ xが負の無限大の場合は-1を返し、それ以外の場合は0を返します。 Note − GCC 4.3は、この関数を、両方の無限大に対して1の値を返すインラインコードに置き換えることができます(gccバグ#35509)。 |
22 | int isnan (double __x) 関数isnan()は、引数__xが「非数」を表す場合に1を返します(NaN)オブジェクト、それ以外の場合は0。 |
23 | double ldexp (double __x, int __exp ) ldexp()関数は、浮動小数点数に2の整数乗を掛けます。これは、__ xの値に2を掛けた値を__expの累乗で返します。 |
24 | double log (double __x) log()関数は、引数__xの自然対数を返します。 |
25 | double log10(double __x) log10()関数は、引数__xの対数を基数10に返します。 |
26 | long lrint (double __x) lrint()関数は、__ xを最も近い整数に丸め、中間の場合を偶数の整数方向に丸めます。(つまり、1.5と2.5の両方の値は2に丸められます)。この関数はrint()関数に似ていますが、戻り値のタイプが異なり、オーバーフローが発生する可能性があります。 Returns 丸められた長整数値。__xが有限数またはオーバーフローでない場合、この実現はLONG_MIN値(0x80000000)を返します。 |
27 | long lround (double __x) lround()関数は、__ xを最も近い整数に丸めますが、(最も近い偶数の整数ではなく)ゼロから半分のケースを丸めます。この関数はround()関数に似ていますが、戻り値のタイプが異なり、オーバーフローが発生する可能性があります。 Returns 丸められた長整数値。__xが有限数でないか、オーバーフローがあった場合、この実現はLONG_MIN値(0x80000000)を返します。 |
28 | double modf (double __x, double * __iptr ) modf()関数は、引数__xを整数部分と小数部分に分割します。各部分の符号は引数と同じです。__iptrが指すオブジェクトに整数部分をdoubleとして格納します。 modf()関数は、__ xの符号付き小数部分を返します。 Note−この実装は、ゼロポインタによる書き込みをスキップします。ただし、GCC 4.3は、この関数を、格納を回避するためにNULLアドレスの使用を許可しないインラインコードに置き換えることができます。 |
29 | float modff (float __x, float * __iptr) modf()のエイリアス。 |
30 | double pow (double __x, double __y) 関数pow()は、__ xの値を指数__yに返します。 |
31 | double round (double __x) round()関数は、__ xを最も近い整数に丸めますが、(最も近い偶数の整数ではなく)ゼロから半分のケースを丸めます。オーバーフローは不可能です。 Returns 四捨五入された値。__xが整数または無限の場合、__ x自体が返されます。__xがNaN、その後 NaN が返されます。 |
32 | int signbit (double __x) __xの値に符号ビットが設定されている場合、signbit()関数はゼロ以外の値を返します。IEEE 754浮動小数点ではゼロに署名できるため、これは `__x <0.0 'と同じではありません。比較 `-0.0 <0.0 'は偽ですが、` signbit(-0.0)'はゼロ以外の値を返します。 |
33 | double sin (double __x) sin()関数は、ラジアンで測定された__xの正弦を返します。 |
34 | double sinh (double __x) sinh()関数は、__ xの双曲線正弦を返します。 |
35 | double sqrt (double __x) sqrt()関数は、__ xの非負の平方根を返します。 |
36 | double square (double __x) 関数square()は__x * __ xを返します。 Note −この関数はC標準定義に属していません。 |
37 | double tan (double __x) tan()関数は、ラジアンで測定された__xのタンジェントを返します。 |
38 | double tanh ( double __x) tanh()関数は、__ xの双曲線タンジェントを返します。 |
39 | double trunc (double __x) trunc()関数は、__ xを絶対値以下の最も近い整数に丸めます。 |
例
次の例は、最も一般的なmath.hライブラリ関数の使用方法を示しています。
double double__x = 45.45 ;
double double__y = 30.20 ;
void setup() {
Serial.begin(9600);
Serial.print("cos num = ");
Serial.println (cos (double__x) ); // returns cosine of x
Serial.print("absolute value of num = ");
Serial.println (fabs (double__x) ); // absolute value of a float
Serial.print("floating point modulo = ");
Serial.println (fmod (double__x, double__y)); // floating point modulo
Serial.print("sine of num = ");
Serial.println (sin (double__x) ) ;// returns sine of x
Serial.print("square root of num : ");
Serial.println ( sqrt (double__x) );// returns square root of x
Serial.print("tangent of num : ");
Serial.println ( tan (double__x) ); // returns tangent of x
Serial.print("exponential value of num : ");
Serial.println ( exp (double__x) ); // function returns the exponential value of x.
Serial.print("cos num : ");
Serial.println (atan (double__x) ); // arc tangent of x
Serial.print("tangent of num : ");
Serial.println (atan2 (double__y, double__x) );// arc tangent of y/x
Serial.print("arc tangent of num : ");
Serial.println (log (double__x) ) ; // natural logarithm of x
Serial.print("cos num : ");
Serial.println ( log10 (double__x)); // logarithm of x to base 10.
Serial.print("logarithm of num to base 10 : ");
Serial.println (pow (double__x, double__y) );// x to power of y
Serial.print("power of num : ");
Serial.println (square (double__x)); // square of x
}
void loop() {
}
結果
cos num = 0.10
absolute value of num = 45.45
floating point modulo =15.25
sine of num = 0.99
square root of num : 6.74
tangent of num : 9.67
exponential value of num : ovf
cos num : 1.55
tangent of num : 0.59
arc tangent of num : 3.82
cos num : 1.66
logarithm of num to base 10 : inf
power of num : 2065.70