我正在构建一个用 C++ 编写的应用程序,其中大量涉及代数。我决定将 GiNaC 用于计算机代数系统 (CAS) 它运行良好;但是有一个小问题。元素的顺序不是我希望它们在输出中的顺序。让我举个例子。这是我的 C++ 代码:
#include <iostream>
#include <ginac/ginac.h>
int main()
{
using namespace GiNaC;
symbol x("x");
ex poly((x^2)+3*x+5);
std::cout << poly;
}
该程序的输出是:
5+x^2+3*x
好吧,我检测到这不是恒定的,输出也可以是:
5+3*x+x^2
虽然,两者在数学上都是正确的,但我想要的形式(或者我需要的 :-) 都不是。我希望多项式以最大程度开始,即我的输出应该是:
x^2+3*x+5
当我们添加有符号数、括号或更复杂的代数表达式时,这个问题会更加严重(它有时甚至会写成 (-3+a)x,看起来很丑 :-)std::cout<<GiNaC::latex
并不能解决问题。在我看来,最烦人的部分是输出的不稳定行为。
在 GiNaC 中是否可能发生类似的事情。我也不想有一个非常混乱的代码(因为 C++0x<regex>
库可以很容易地做到这一点,但我宁愿不涉及正则表达式,我的代码已经足够复杂了)
我在 Ubuntu Quantal Quetzal 下使用 GCC 4.7.2 . 谢谢您的帮助。