是否有任何免费的库让用户轻松建立一个C数学表达式,它可以像任何其他函数一样使用?我的意思是c表达/函数可以像'内联'数学表达一样快,并且可以在程序中多次使用。 我认为我可以用C来完成,但是有没有人可以告诉它,如果它必须是CUDA的dveice函数,它可能是真实的吗?如何让用户创建一个函数? [ 图书馆 ? ]
回答
有几个选项。我假设你想要的东西,用户可以“拨打”好几次,像这样:
void *s = make_func("2 * x + 7");
...
printf("%lf\n", call_func(s, 3.0)); // prints 13
...
printf("%lf\n", call_func(s, 5.0)); // prints 17
...
free_func(s);
一种选择是实现这个作为一个递归结构保持功能指针和常量。喜欢的东西:
enum item_type { VAR, CONST, FUNC };
struct var {
enum item_type;
int id;
};
struct constant {
enum item_type;
double value;
};
struct func {
enum item_type;
double (*func)(double, double);
enum item_type *a, *b;
};
然后make_func
会分析上面的字符串转换成类似:
(struct func *){ FUNC, &plus,
(struct func *){ FUNC, ×,
(struct constant *){ CONST, 2 },
(struct var *){ VAR, 'x' } }
(struct constant *){ CONST, 7 } }
如果你能明白 - 在struct func
的enum type_item
用来指向下一个节点树(或者说,该节点的第一个元素,即enum
)和enum
是我们的代码用来找出项目类型的内容。然后,当我们使用call(void *, ...)
函数时,它会计算有多少个变量 - 这是函数应该传递多少个额外参数 - 然后用我们调用的值替换变量,然后执行计算。
另一种选择(可能会更快,更容易延长)是使用类似libjit的东西来为你完成大部分工作。我从来没有使用它,但JIT编译器为您提供了一些基本构建块(如添加,乘法等“指令”),您可以根据需要将它们串起来,然后将它们编译为实际汇编代码(如此没有经过构造的语法树调用像我们以前所需的函数指针),所以当你调用它时,它尽可能快速和动态。
我不知道libjit的API,但它看起来很容易能够做你看起来需要的东西。 make_func
和free_func
可能都与上述内容几乎相同(您可能必须将呼叫更改为call_func
),并且基本上会根据它解析用户的字符串的方式构建,使用和销毁JIT对象。与上面相同,确实如此,但您不需要自己定义语法树,数据类型等。
希望有些帮助。
我想我应该改变“常量”到“文字”。好吧。我会在今天晚些时候尝试真正实现这些乐趣的时候去做。 – 2011-03-10 01:02:27
你的想法和我的乐趣似乎差异很大。 :-D – 2011-03-10 03:46:44
libtcc
(来自TCC)可以作为一个非常小而快的JIT;有关示例用法,请参见libtcc_test.cc
。
- 1. 创建一个图书馆一个Arduino
- 2. Android - 图书馆创建和使用
- 3. 如何从其他图书馆活动调用一个图书馆活动?
- 4. 使用phpDocumentor的创建一个Eclipse图书馆
- 5. jQuery函数创建与没有图书馆问题
- 6. 如何使用SVN建立一个图书馆
- 7. 如何使用图书馆
- 8. 一个项目中的图书馆,我想使用另一个图书馆
- 9. 图书馆对图书馆的引用
- 10. 如何在Salesforce中创建一个新的铅使用TwilioForce APEX图书馆
- 11. 图书馆,以帮助创建用户注册的网站
- 12. 未创建图书馆类的垫片
- 13. SyntaxHighlighter图书馆
- 14. 一个图书馆多数据库
- 15. 保护图书馆?
- 16. 图书馆创作策略
- 17. 如何让这个图书馆适应故事板?
- 18. 传递函数ReactNative图书馆ActionButton
- 19. VS2005图书馆
- 20. 图书馆图书馆:如何正确处理重点?
- 21. 加入预建图书馆
- 22. 如何设计图书馆?
- 23. 图书馆与图书馆项目与外部图书馆的区别
- 24. 如何创建调用一个函数
- 25. 图书馆interposition nanosleep
- 26. 图书馆
- 27. 一组小型图书馆与一个大型图书馆的性能java
- 28. 如何使用Perl在数字图书馆中为mpg创建插件?
- 29. 使用图书馆
- 30. 从图书馆重定向
用户如何调用此函数? – Argote 2011-03-10 00:16:05
你的意思是像[自动编程](http://en.wikipedia.org/wiki/Automatic_programming)? – pmg 2011-03-10 00:18:13
你想要一个数学解析器吗? – 2011-03-10 00:19:43