Exponent:开源的数学表达式库

夜弓写了一 个C++的数学表达式库。这个库还是满有创意的,使用它构造了一个函数对象之后,你就可以随时传给它适当的参数求得函数的值。因而你的代码几乎就可以像数 学表达式那样简洁,并且具有可读性。我在Gcc3.3和Vc2005的编译器上编译通过,没有问题。如果你在更多的编译器上编译通过,请留言让大家知道 啊。

我偷个懒,下面的介绍摘自作者写的文档。

1.你不用声明并实现一个函数就可以得到和它功能相同的函数对象。例如,你需要
得到一个计算平面两点’(x1,y1)’ and ‘(x2,y2)’距离的函数。以前你需要这样做:
   float Euclid_Distance(float dx, float dy)
   {
      return sqrt(dx*dx+dy*dy);
   }

新办法是:
   //…any where of your program
   Variable x(1),y(2);
   Function fx = sqrt(x*x+y*y); //或者 sqrt((x^2.0f)+(y^2.0f);

2.对于分段函数,本库提供一种一目了然的表达:
    fx += WHEN(x>99.0f) | lg(x),
          WHEN(x>9.99f) | 10.0f-x,
          WHEN(x>0.0f)  | sin(x),
          sin(cos(x));
如你所见,这种办法要比使用”switch”或者”if-else”语句清晰多了。

3.几乎所有函数,都可以求得它的偏导数。
   fx = -cos(x);
   gx = fx.difference();
假如你修过微积分的课程,那么你现在已经知道”gx = sin(x)”.

4.动态创建函数对象。虽然我没有特意在这个方面作研究,但是我相信这个库确实
可以向这个方面发展。例如你打算写一个分析数学表达式的程序,这个库(或者其改
进版本)将会非常有用。如果有人对这方面的利用抱有兴趣,请联系作者。

5.任何你能找到的用处…

也许你心动了,这么好的东西到哪里可以找到?很简单,点这里就可以得到源码了,里面不但包含了所有的历史版本,还有作者写的几个sample。如果你有好的点子,要和作者联系,请写信到:yegong1985@鸡妹儿到炕

原文链接

你可能感兴趣的:(exp)