龙听期货论坛's Archiver

龙听 发表于 2024-12-4 14:38

C++程序化/量化学习视频教程系列 第022节:C语言知识点之C++ 内置数学运算函数( cos、sin、log、pow、sqrt、abs、floor等)知识及C++量化开发中的注意事项【C++量化开发知识点系列】

C++程序化/量化学习视频教程系列 第022节:C语言知识点之C++ 内置数学运算函数( cos、sin、log、pow、sqrt、abs、floor等)知识及C++量化开发中的注意事项【C++量化开发知识点系列】

[mp4]http://mp4.qhlt.club/Cpp-Video/022.mp4[/mp4]

C++程序化学习视频教程系列安排如下:
第一楼:教学视频。一般控制在15分钟左右;
第二椄:视频课程中使用的程式源码。
第三楼:视频教学中需要用到的一些文档或资源。
第四楼:其它的一些边角料,特别是一些经典程序化策略的回测类的部分会放到下面楼层里面。

参与模式如下:
1、希望参与到编写策略与调试方面的工作通过上面的联系方式联系管理员咨询即可。记的加群,有问题第一时间交流,也可以在论坛指定版发贴交流,专用版地址:[url=http://www.qhlt.cn/forum-244-1.html]http://www.qhlt.cn/forum-244-1.html[/url];
2、有意申请试用及绑定期货账户跑实盘网友可以联系管理员,以及开通的方式。
3、基于C++策略交易软件具有:1、软件小(50兆不到);2、效率高(C++语言);3、功能精(专注于策略);4、对服务噐或电脑兼容性好(WIN系统)等优势,特别适合长期跑程序化的客户朋友,特别是有稳定交易模式客户更适合使用C++构建的交易系统。
4、最全的C++期货程序化(量化)教程、视频、源码、课件、资源汇总贴【C++期货程序化/量化研究必备资源贴!】:[url=http://www.qhlt.cn/thread-160231-1-1.html]http://www.qhlt.cn/thread-160231-1-1.html[/url];
5、鼎元C++量化程式码技术指标源码C++版模板【建议在test.h和test.cpp中同步至最新,方便统一调用和使用,一次编辑多次使用!】:[url=http://www.qhlt.cn/thread-160230-1-1.html]http://www.qhlt.cn/thread-160230-1-1.html[/url];
6、如何使用鼎元C++量化软件以及需要准备的些什么?[C++量化入门必读!]:[url=http://www.qhlt.cn/thread-160415-1-1.html]http://www.qhlt.cn/thread-160415-1-1.html[/url];

联系方式:
C++微信群:[img=180,180]http://p.algo2.net/2024/0922/23852f86ccf81.png[/img]  QQ群:[img=140,180]http://p.algo2.net/2024/0115/3c6af4df957c3.jpg[/img] 管理员微信:[img]http://www.qhlt.cn/link/wx.png[/img];管理员QQ:[img]http://www.qhlt.cn/link/q.png[/img]

龙听 发表于 2024-12-4 14:39

C++ 数学运算

在 C++ 中,除了可以创建各种函数,还包含了各种有用的函数供您使用。这些函数写在标准 C 和 C++ 库中,叫做内置函数。您可以在程序中引用这些函数。

C++ 内置了丰富的数学函数,可对各种数字进行运算。下表列出了 C++ 中一些有用的内置的数学函数。

为了利用这些函数,您需要引用数学头文件 <cmath>。

[table]
[tr][td=1,1,5%]序号[/td][td]函数 & 描述[/td][/tr]
[tr][td]1[/td][td][b]double cos(double);[/b]
该函数返回弧度角(double 型)的余弦。[/td][/tr]
[tr][td]2[/td][td][b]double sin(double);[/b]
该函数返回弧度角(double 型)的正弦。[/td][/tr]
[tr][td]3[/td][td][b]double tan(double);[/b]
该函数返回弧度角(double 型)的正切。[/td][/tr]
[tr][td]4[/td][td][b]double log(double);[/b]
该函数返回参数的自然对数。[/td][/tr]
[tr][td]5[/td][td][b]double pow(double, double);[/b]
假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。[/td][/tr]
[tr][td]6[/td][td][b]double hypot(double, double);[/b]
该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。[/td][/tr]
[tr][td]7[/td][td][b]double sqrt(double);[/b]
该函数返回参数的平方根。[/td][/tr]
[tr][td]8[/td][td][b]int abs(int);[/b]
该函数返回整数的绝对值。[/td][/tr]
[tr][td]9[/td][td][b]double fabs(double);[/b]
该函数返回任意一个浮点数的绝对值。[/td][/tr]
[tr][td]10[/td][td][b]double floor(double);[/b]
该函数返回一个小于或等于传入参数的最大整数。[/td][/tr]
[/table]

龙听 发表于 2024-12-4 14:44

下面是一个关于数学运算的简单实例:[code]#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
   // 数字定义
   short  s = 10;
   int    i = -1000;
   long   l = 100000;
   float  f = 230.47;
   double d = 200.374;

   // 数学运算
   cout << "sin(d) :" << sin(d) << endl;
   cout << "abs(i)  :" << abs(i) << endl;
   cout << "floor(d) :" << floor(d) << endl;
   cout << "sqrt(f) :" << sqrt(f) << endl;
   cout << "pow( d, 2) :" << pow(d, 2) << endl;

   return 0;
}[/code]

龙听 发表于 2024-12-4 15:46

[b]<cmath> (math.h)[/b]

Trigonometric functions(三角函数):

[b]cos:x 弧度的余弦值。[/b][code]double cos (double x);  [/code]以弧度表示的角度值。一个弧度相当于 180/PI 度。[code]/* cos example */
#include <stdio.h>      /* printf */
#include <math.h>       /* cos */

#define PI 3.14159265

int main ()
{
  double param, result;
  param = 60.0;
  result = cos ( param * PI / 180.0 );
  printf ("The cosine of %f degrees is %f.\n", param, result );
  return 0;
}[/code][b][code] double sin (double x); [/code][/b]

返回 x 弧度角的正弦值。

参数
x
用弧度表示的角度值。
一个弧度相当于 180/PI 度。[code]/* sin example */
#include <stdio.h>      /* printf */
#include <math.h>       /* sin */

#define PI 3.14159265

int main ()
{
  double param, result;
  param = 30.0;
  result = sin (param*PI/180);
  printf ("The sine of %f degrees is %f.\n", param, result );
  return 0;
}[/code][b][code]double tan (double x); [/code][/b]

计算正切
返回 x 弧度角的正切值。

参数
x
代表角度的值,用弧度表示。
一个弧度相当于 180/PI 度。

返回值
x 弧度的正切值。[code]/* tan example */
#include <stdio.h>      /* printf */
#include <math.h>       /* tan */

#define PI 3.14159265

int main ()
{
  double param, result;
  param = 45.0;
  result = tan ( param * PI / 180.0 );
  printf ("The tangent of %f degrees is %f.\n", param, result );
  return 0;
}[/code][b][code]  double exp (double x);  [/code][/b]

计算指数函数
返回 x 的基指数函数,即 e 升至 x 的幂次:e^x。

参数
x
指数值。

返回值
x 的指数值。[code]/* exp example */
#include <stdio.h>      /* printf */
#include <math.h>       /* exp */

int main ()
{
  double param, result;
  param = 5.0;
  result = exp (param);
  printf ("The exponential value of %f is %f.\n", param, result );
  return 0;
}[/code][b][code]   double log (double x);  [/code][/b]

计算自然对数
返回 x 的自然对数。

自然对数是基对数:自然指数函数 (exp) 的倒数。有关常用(基 10)对数,请参阅 log10。

参数
x
计算对数值。
如果参数为负数,将出现域错误。

返回值
x 的自然对数。
如果 x 为负值,会导致域错误。
如果 x 为零,可能会导致极值错误(取决于库的实现)。[code]/* log example */
#include <stdio.h>      /* printf */
#include <math.h>       /* log */

int main ()
{
  double param, result;
  param = 5.5;
  result = log (param);
  printf ("log(%f) = %f\n", param, result );
  return 0;
}[/code][b][code]double log10 (double x); [/code][/b]

计算常用对数
返回 x 的常用对数(10 为底)。

参数
x
计算对数值。
如果参数为负数,将出现域错误。

返回值
x 的常用对数。
如果 x 为负值,会导致域错误。
如果 x 为零,可能会导致极值错误(取决于库的实现)。[code]/* log10 example */
#include <stdio.h>      /* printf */
#include <math.h>       /* log10 */

int main ()
{
  double param, result;
  param = 1000.0;
  result = log10 (param);
  printf ("log10(%f) = %f\n", param, result );
  return 0;
}[/code][b][code] double modf (double x     , double* intpart);[/code][/b]

分解成分数部分和积分部分
将 x 分解为整数部分和小数部分。

整数部分存储在 intpart 指向的对象中,小数部分由函数返回。

两部分的符号都与 x 相同。

参数
x
要分割成若干部分的浮点数值。
整数部分
指向一个对象(与 x 类型相同)的指针,整数部分存储在该对象中,符号与 x 相同。

返回值
x 的小数部分,符号相同。[code]/* modf example */
#include <stdio.h>      /* printf */
#include <math.h>       /* modf */

int main ()
{
  double param, fractpart, intpart;

  param = 3.14159265;
  fractpart = modf (param , &intpart);
  printf ("%f = %f + %f \n", param, intpart, fractpart);
  return 0;
}[/code][b][code]double exp2 (double x); [/code][/b]

计算以2为底的指数函数
返回 x 的以2为底的指数函数值,即 2 提升到 x 的幂次:2^x。

参数
x
指数值。

返回值
2 升为 x 的幂。[code]/* exp2 example */
#include <stdio.h>      /* printf */
#include <math.h>       /* exp2 */

int main ()
{
  double param, result;
  param = 8.0;
  result = exp2 (param);
  printf ("2 ^ %f = %f.\n", param, result );
  return 0;
}[/code][b][code] double pow (double base     , double exponent); [/code][/b]

升为幂
返回基数升幂的指数:

base^exponent

参数
基数
底数值。
指数
指数值。

返回值
将底数提高到指数幂的结果。[code]/* pow example */
#include <stdio.h>      /* printf */
#include <math.h>       /* pow */

int main ()
{
  printf ("7 ^ 3 = %f\n", pow (7.0, 3.0) );
  printf ("4.73 ^ 12 = %f\n", pow (4.73, 12.0) );
  printf ("32.01 ^ 1.54 = %f\n", pow (32.01, 1.54) );
  return 0;
}[/code][b][code] double sqrt (double x);  [/code][/b]

计算平方根
返回 x 的平方根。

参数
x
要计算平方根的值。
如果参数为负值,则出现域错误。

返回值
x 的平方根。
如果 x 为负值,则出现域错误[code]/* sqrt example */
#include <stdio.h>      /* printf */
#include <math.h>       /* sqrt */

int main ()
{
  double param, result;
  param = 1024.0;
  result = sqrt (param);
  printf ("sqrt(%f) = %f\n", param, result );
  return 0;
}[/code][b][code] double cbrt (double x);[/code][/b]

计算立方根
返回 x 的立方根。

参数
x
要计算立方根的值。

返回值
x 的立方根。[code]/* cbrt example */
#include <stdio.h>      /* printf */
#include <math.h>       /* cbrt */

int main ()
{
  double param, result;
  param = 27.0;
  result = cbrt (param);
  printf ("cbrt (%f) = %f\n", param, result);
  return 0;
}[/code][b][code] double hypot (double x     , double y);[/code][/b]

计算斜边
返回直角三角形的斜边,直角三角形的边长为 x 和 y。

该函数返回 x 和 y 的平方和的平方根(根据勾股定理),但不会导致中间值过度溢出或溢出不足。

参数
x, y
浮点数值,对应于计算斜边的直角三角形的两脚。

返回值
(x^2+y^2) 的平方根。[code]/* hypot example */
#include <stdio.h>      /* printf */
#include <math.h>       /* hypot */

int main ()
{
  double leg_x, leg_y, result;
  leg_x = 3;
  leg_y = 4;
  result = hypot (leg_x, leg_y);
  printf ("%f, %f and %f form a right-angled triangle.\n",leg_x,leg_y,result);
  return 0;
}[/code][b][code]double erf (double x);  [/code][/b]

计算误差函数
误差函数 返回 x 的误差函数值。
[img]http://p.algo2.net/2024/1204/150585b27bfab.png[/img]

参数
x
误差函数参数。

返回值
x 的误差函数值。[code]/* erf example */
#include <stdio.h>      /* printf */
#include <math.h>       /* erf */

int main ()
{
  double param, result;
  param = 1.0;
  result = erf (param);
  printf ("erf (%f) = %f\n", param, result );
  return 0;
}[/code][b][code] double ceil (double x);[/code][/b]

向上舍入值
将 x 向上舍入,返回不小于 x 的最小整数值。

参数
x
四舍五入的值。

返回值
不小于 x 的最小整数值(浮点数)。[code]/* ceil example */
#include <stdio.h>      /* printf */
#include <math.h>       /* ceil */

int main ()
{
  printf ( "ceil of 2.3 is %.1f\n", ceil(2.3) );
  printf ( "ceil of 3.8 is %.1f\n", ceil(3.8) );
  printf ( "ceil of -2.3 is %.1f\n", ceil(-2.3) );
  printf ( "ceil of -3.8 is %.1f\n", ceil(-3.8) );
  return 0;
}[/code][b][code] double floor (double x);   [/code][/b]

向下舍入值
将 x 向下舍入,返回不大于 x 的最大整数值。

参数
x
要舍入的值。

返回值
向下舍入后的 x 值(浮点数)。[code]/* floor example */
#include <stdio.h>      /* printf */
#include <math.h>       /* floor */

int main ()
{
  printf ( "floor of 2.3 is %.1lf\n", floor (2.3) );
  printf ( "floor of 3.8 is %.1lf\n", floor (3.8) );
  printf ( "floor of -2.3 is %.1lf\n", floor (-2.3) );
  printf ( "floor of -3.8 is %.1lf\n", floor (-3.8) );
  return 0;
}[/code][b][code]double round (double x); [/code][/b]

四舍五入
返回与 x 最接近的积分值,半数情况下四舍五入为零。

参数
x
要舍入的值。

返回值
四舍五入为最接近整数的 x 值(浮点数)。[code]/* round vs floor vs ceil vs trunc */
#include <stdio.h>      /* printf */
#include <math.h>       /* round, floor, ceil, trunc */

int main ()
{
  const char * format = "%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n";
  printf ("value\tround\tfloor\tceil\ttrunc\n");
  printf ("-----\t-----\t-----\t----\t-----\n");
  printf (format, 2.3,round( 2.3),floor( 2.3),ceil( 2.3),trunc( 2.3));
  printf (format, 3.8,round( 3.8),floor( 3.8),ceil( 3.8),trunc( 3.8));
  printf (format, 5.5,round( 5.5),floor( 5.5),ceil( 5.5),trunc( 5.5));
  printf (format,-2.3,round(-2.3),floor(-2.3),ceil(-2.3),trunc(-2.3));
  printf (format,-3.8,round(-3.8),floor(-3.8),ceil(-3.8),trunc(-3.8));
  printf (format,-5.5,round(-5.5),floor(-5.5),ceil(-5.5),trunc(-5.5));
  return 0;
}[/code][b][code] double abs (double x); [/code][/b]

计算绝对值
返回 x 的绝对值: |x|.

参数
x
返回绝对值的值。

返回值
x 的绝对值。[code]// cmath's abs example
#include <iostream>     // std::cout
#include <cmath>        // std::abs

int main ()
{
  std::cout << "abs (3.1416) = " << std::abs (3.1416) << '\n';
  std::cout << "abs (-10.6)  = " << std::abs (-10.6) << '\n';
  return 0;
}[/code]更多高等数学计算函数参考:**** Hidden Message *****

页: [1]