Arduino函数库04.Arduino 数学库

Arduino数学库(math.h)包含了许多用于操作浮点数的有用的数学函数。 库中的宏 以下是在标题math.h中定义的宏: 宏 值 描述 M_E 2.7182818284590452354 常数e。 M_LOG2E 1.4426950408889634074/* log_2 e */ e以2为底的对数。 M_1_PI 0.3183098861837906…

Arduino数学库(math.h)包含了许多用于操作浮点数的有用的数学函数。

库中的宏

以下是在标题math.h中定义的宏:

描述
M_E2.7182818284590452354常数e。
M_LOG2E1.4426950408889634074/* log_2 e */e以2为底的对数。
M_1_PI0.31830988618379067154/* 1/pi */常数1/pi。
M_2_PI0.63661977236758134308/* 2/pi */常数2/pi。
M_2_SQRTPI1.12837916709551257390/* 2/sqrt(pi) */常数2/sqrt(pi)。
M_LN102.30258509299404568402/* log_e 10 */10的自然对数。
M_LN20.69314718055994530942/* log_e 2 */2的自然对数。
M_LOG10E0.43429448190325182765/* log_10 e */e以10为底的对数。
M_PI3.14159265358979323846/* pi */常数pi。
M_PI_23.3V1.57079632679489661923/* pi/2 */常数pi/2。
M_PI_40.78539816339744830962/* pi/4 */常数pi/4。
M_SQRT1_20.70710678118654752440/* 1/sqrt(2) */常数1/sqrt(2)。
M_SQRT21.41421356237309504880/* sqrt(2) */2的平方根。
acosfacos()函数的别名。
asinfasin()函数的别名。
atan2fatan2()函数的别名。
cbrtfcbrt()函数的别名。
ceilfceil()函数的别名。
copysignfcopysign()函数的别名。
coshfcosh()函数的别名。
expfexp()函数的别名。
fabsffabs()函数的别名。
fdimffdim()函数的别名。
floorffloor()函数的别名。
fmaxffmax()函数的别名。
fminffmin()函数的别名。
fmodffmod()函数的别名。
frexpffrexp()函数的别名。
hypotfhypot()函数的别名。
INFINITY无穷大常量。
isfinitefisfinite()函数的别名。
isinffisinf()函数的别名。
isnanfisnan()函数的别名。
ldexpfldexp()函数的别名。
log10flog10()函数的别名。
logflog()函数的别名。
lrintflrint()函数的别名。
lroundflround()函数的别名。

库函数

以下函数在标题 math.h 中定义:

序号库函数和描述
1double acos (double __x)
acos()函数计算x的反余弦的主值。返回值在[0, pi]弧度的范围内。不在[-1, +1]范围内的参数会发生域错误。
2double asin (double __x)
asin()函数计算x的反正弦的主值。返回值在[-pi/2, pi/2]弧度的范围内。不在[-1, +1]范围内的参数会发生域错误。
3double atan (double __x)
atan()函数计算x的反正切的主值。返回值在[-pi/2, pi/2]弧度的范围内。
4double atan2 (double __y, double __x)
atan2()函数计算y/x的反正切的主值,使用两个参数的符号来确定返回值的象限。返回值在[-pi, +pi]弧度的范围内。
5double cbrt (double __x)
cbrt()函数返回x的立方根值。
6double ceil (double __x)
ceil()函数返回大于或等于x的最小整数值,以浮点数表示。
7static double copysign (double __x, double __y)
copysign()函数返回x,但带有y的符号。即使x或y是NaN或零,他们也可以工作。
8double cos(double __x)
cos()函数返回x的余弦,以弧度为单位。
9double cosh (double __x)
cosh()函数返回x的双曲余弦。
10double exp (double __x)
exp()返回e的x次幂的值。
11double fabs (double __x)
fabs()函数计算浮点数x的绝对值。
12double fdim (double __x, double __y)
fdim()函数返回max(x – y, 0)。如果x或y或者两者都是NaN,则返回NaN。
13double floor (double __x)f
loor()函数返回小于或等于x的最大整数值,以浮点数表示。
14double fma (double __x, double __y, double __z)
fma()函数执行浮点乘加,即运算(x * y) + z,但是中间结果不会四舍五入到目标类型。这有时可以提高计算的精度。
15double fmax (double __x, double __y)
fmax()函数返回两个值x和y中较大的一个。如果一个参数是NaN,则返回另一个参数。如果两个参数都是NaN,则返回NaN。
16double fmin (double __x, double __y)
fmin()函数返回两个值x和y中较小的一个。如果一个参数是NaN,则返回另一个参数。如果两个参数都是NaN,则返回NaN。
17double fmod (double __x, double__y)
fmod()函数返回x / y的余数。
18double frexp (double __x, int * __pexp)f
rexp()函数将浮点数分解为规格化分数和2的整次幂。它将整数存储在pexp指向的int对象中。如果x是一个正常的浮点数,则frexp()函数返回值v,使得v具有区间[1/2, 1)或零的量值,而x等于v乘以2的pexp次幂。如果x是零,那么结果的两个部分都是零。如果x不是有限数字,frexp()将按原样返回x,并通过pexp存储0。
注意 − 这个实现允许一个零指针作为指令来跳过存储指数。
19double hypot (double __x, double__y)
hypot()函数返回sqrt(x*x + y*y)。这是一个边长为x和y的直角三角形的斜边的长度,或点(x, y)距离原点的距离。使用这个函数而不是直接使用公式是比较明智的,因为误差要小得多。x和y没有下溢。如果结果在范围内,则不会溢出。
20static int isfinite (double __x)
如果x是有限的,isfinite()函数返回一个非零值:不是正或负无穷,也不是NaN
21int isinf (double __x)
如果参数x是正无穷大,则函数isinf()返回1;如果x是负无穷大,则返回-1,否则返回0。
注意 − GCC 4.3可以用内联代码替换这个函数,这个代码对两个无穷大返回1值(gcc bug #35509)。
22int isnan (double __x)
如果参数x表示“非数字”(NaN)对象,则函数isnan()返回1,否则返回0。
23double ldexp (double __x, int __exp )
ldexp()函数将浮点数乘以2的整数次幂。它返回x乘以2的exp次幂的值。
24double log (double __x)
log()函数返回参数x的自然对数。
25double log10(double __x)
log10()函数返回参数x的对数,以10为基数。
26long lrint (double __x)
lrint()函数将x四舍五入到最近的整数,将中间情况舍入到偶数整数方向(例如,1.5和2.5的值都舍入到2)。这个函数类似于rint()函数,但是它的返回值类型不同,并且有可能溢出。
返回
四舍五入的长整数值。如果x不是有限数字或者溢出,则此实现返回LONG_MIN值(0x80000000)。
27long lround (double __x)
lround()将函数将x四舍五入到最近的整数,但中间情况不舍入到0(不是到最近的偶数整数)。这个函数类似于round()函数,但是它的返回值的类型是不同的,并且有可能溢出。返回四舍五入的长整数值。如果x不是有限数字或者溢出,则此实现返回LONG_MIN值(0x80000000)。
28double modf (double __x, double * __iptr )
modf()函数将参数x分解为整数部分和小数部分,每个部分都与参数具有相同的符号。它在iptr指向的对象中将整数部分存储为double。modf()函数返回x的有符号小数部分。
注意 − 这个实现跳过零指针的写入。但是,GCC 4.3可以用内联代码替换这个函数,不允许使用NULL地址来避免存储。
29float modff (float __x, float * __iptr)
modf()函数的别名。
30double pow (double __x, double __y)
pow()函数返回x的y次幂。
31double round (double __x)
round()函数将x四舍五入到最近的整数,但中间情况不舍入到0(不是到最近的偶数整数)。不可能会溢出。返回四舍五入的值。如果x是整数或无穷大,则返回x本身。如果x是NaN,则返回NaN
32int signbit (double __x)
如果x的值设置了符号位,signbit()函数将返回一个非零值。这与“x < 0.0”不同,因为IEEE 754浮点允许零署名。比较“-0.0 < 0.0”是错的,但“signbit (-0.0)”会返回一个非零值。
33double sin (double __x)
sin()函数返回x的正弦值,以弧度为单位。
34double sinh (double __x)
sinh()函数返回x的双曲正弦。
35double sqrt (double __x)sqrt()函数返回x的非负平方根。
36double square (double __x)
square()函数返回x * x。注意 − 此函数不属于C标准定义。
37double tan (double __x)
tan()函数返回x的正切值,以弧度为单位。
38double tanh ( double __x)
tanh()函数返回x的双曲正切。
39double 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

发布者:suiyublg,转转请注明出处:https://huibian.net/1024-2/

(19)
suiyublg的头像suiyublg
上一篇 2017年4月2日 22:54
下一篇 2017年4月4日 12:51

相关推荐

  • Arduino教程31.Arduino delayMicroseconds()函数

    delayMicroseconds()函数接受单个整数(或数字)参数。此数字表示时间,以微秒为单位。一毫秒内有一千微秒,一秒内有一百万微秒。 目前,可以产生精确延迟的最大值是16383。这可能会在未来的Arduino版本中改变。对于超过几千微秒的延迟,应该使用delay()函数。 delayMicroseconds()函数语法 delayMicrosecon…

    2017年3月29日
    5500
  • Arduino函数库05.Arduino 三角函数

    你需要使用三角几何来计算移动物体的距离或角速度。Arduino提供了传统的三角函数(sin,cos,tan,asin,acos,atan),可以通过编写它们的原型来概括。Math.h包含三角函数的原型。 三角函数的精确语法 例子

    2017年4月4日
    11300
  • Arduino进阶02.Arduino 脉冲宽度调制

    无法量产的亮银版,价格据说10万元都搞不定。

    2017年4月6日
    10500
  • Arduino函数库01.Arduino I/O函数

    Arduino板上的引脚可以配置为输入或输出。我们将在这些模式下解释引脚的功能。重要的是要注意,大多数Arduino模拟引脚可以按照与数字引脚完全相同的方式进行配置和使用。 引脚配置为INPUT Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。以这种方式配置的引脚被称为处于高阻抗状态。输入引…

    2017年3月31日
    12221
  • Arduino教程09.Arduino 循环

    编程语言提供了各种控制结构,允许更复杂的执行路径。 循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式: C语言提供以下类型的循环来处理循环需求。 序号 循环及描述 1 while循环while循环将会连续、无限循环,直到括号()内的表达式变为false。必须用一些东西改变被测试的变量,否则while循环永远不会退出。 2 …

    2017年3月25日
    11203

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
欢迎大家来到大雄学编程!