Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将表达式转换为GNU MPL语法_C_Gmp_Arbitrary Precision - Fatal编程技术网

C 将表达式转换为GNU MPL语法

C 将表达式转换为GNU MPL语法,c,gmp,arbitrary-precision,C,Gmp,Arbitrary Precision,我必须计算一组C表达式,如下所示: (-2*a*Power(E,-(((a + b)*x3)/n3) + (b*x2 + a*x3)/n3)*Power(n3,2))/Power(a - b,3) + (2*a*Power(E,-(((a + b)*x3)/n3) + (a*x2 + b*x3)/n3)*Power(n3,2))/Power(a - b,3) 这是C实现的一部分。现在我想使用GNU多精度库。我知道它有自己的特殊语法。我现在在想,计算表达式的最佳方法是什么?是否有任何类型的“解析

我必须计算一组C表达式,如下所示:

(-2*a*Power(E,-(((a + b)*x3)/n3) + (b*x2 + a*x3)/n3)*Power(n3,2))/Power(a - b,3) + (2*a*Power(E,-(((a + b)*x3)/n3) + (a*x2 + b*x3)/n3)*Power(n3,2))/Power(a - b,3)
这是C实现的一部分。现在我想使用GNU多精度库。我知道它有自己的特殊语法。我现在在想,计算表达式的最佳方法是什么?是否有任何类型的“解析器”来转换整个表达式?我还没有找到这样的东西。我也在考虑编写一个脚本,将表达式拆分为原子操作,然后将其转换为MP语法,但我想先看看是否还有其他内容。老实说,公式非常长,在GNUMP中将其转换为单个操作将创建非常长的源代码。不幸的是,我被困在这里了。我使用过一些小示例,但不知道如何处理长表达式


谢谢。

使用C++是一种选择吗?GMP C++绑定使这更容易,因为C++有操作符重载:这是个好主意。然而,我不能真正转换到C++,因为计算在一个相当大的C程序中只是很小的一部分,它是一个很容易被隔离的小部分吗?如果是这样,你可以把计算粘贴到一个额外的C++源文件中,提供一个C接口(可以通过GMP C结构并返回它们),并且将两者链接在一起。虽然在不了解更多项目的情况下,很难说构建过程中增加的额外复杂性是否真的抵消了不必重写代数表达式的影响……好吧,实际计算需要进行数百万次。然而,它们只是整个程序的一小部分,但是如果C和C++之间传递的话,我有点担心计算速度的任何损失。每一秒都很重要。但这一点很好,我会考虑的