当前位置: 首页 > 文档资料 > Arduino 中文教程 >

Arduino - 数学图书馆( Math Library)

优质
小牛编辑
133浏览
2023-12-01

Arduino Math库(math.h)包含许多用于处理浮点数的有用数学函数。

Library宏 (Library Macros)

以下是头部math.h中定义的宏 -

描述
M_E2.7182818284590452354The constant e.
M_LOG2E

1.4426950408889634074

/* log_2 e */

e到对数2的对数
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 */

The constant pi
M_PI_2

3.3V1.57079632679489661923

/* pi/2 */

常数pi/2
M_PI_4

0.78539816339744830962

/* pi/4 */

常数pi/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-INFINITY constant
isfinitef-isfinite()函数的别名
isinff-isinf()函数的别名
isnanf-isnan()函数的别名
ldexpf-ldexp()函数的别名
log10f-log10()函数的别名
logf-log()函数的别名
lrintf-lrint()函数的别名
lroundf-lround()函数的别名

Library 函数

标题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()函数返回两个值__x和__y中较大的一个。 如果参数是NaN,则返回另一个参数。 如果两个参数都是NaN,则返回NaN。

16

double fmin (double __x, double __y)

fmin()函数返回两个值__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)

如果__x是有限的,则isfinite()函数返回非零值:不是加或减无穷大,而不是NaN

21

int isinf (double __x)

如果参数__x是正无穷大,函数isinf()返回1,如果__x是负无穷大,则返回-1,否则返回0。

Note - GCC 4.3可以用内联代码替换此函数,该代码返回两个无穷大的1值(gcc bug#35509)。

22

int isnan (double __x)

如果参数__x表示“非数字”( NaN )对象,则函数isnan()返回1,否则返回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()函数返回非零值。 这与`__x <0.0'不同,因为IEEE 754浮点允许零签名。 比较`-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舍入为绝对值不大的最接近的整数。

例子 (Example)

以下示例显示如何使用最常见的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() {
}

结果 (Result)

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