problem with print_csrc_cl_N --> solved?
Hello everybody, Let's write something about GiNaC in order to improve the GiNaC/spam ratio in this mailing list a bit. I found that the following program #include <ginac/ginac.h> #include <iostream> using namespace std; using namespace GiNaC; int main() { symbol a("a"),b("b"); (-2*a-2*b).print(print_csrc_cl_N(cout)); cout << endl; return 0; } gives as output: cln::cl_F("-2.0")*bcln::cl_F("-2.0")*a This does not compile since there should be a + between the b and the cln::cl_F. The problem disappears if I change the line if (it != itend && !(it->coeff.info(info_flags::negative) || (it->coeff.is_equal(_num1) && is_exactly_a<numeric>(it->rest) && it->rest.info(info_flags::negative)))) which occurs in the file add.cpp to if (it != itend && (is_a<print_csrc_cl_N>(c) || !(it->coeff.info(info_flags::negative) || (it->coeff.is_equal(_num1) && is_exactly_a<numeric>(it->rest) && it->rest.info(info_flags::negative))))) Now the output of the test program is cln::cl_F("-2.0")*b+cln::cl_F("-2.0")*a which compiles correctly. Greetings, Chris Dams
Hi, On Mon, 26 Aug 2002, Chris Dams wrote:
Hello everybody,
Let's write something about GiNaC in order to improve the GiNaC/spam ratio in this mailing list a bit.
Oh, no need to apologize, you're welcome to send non-spam. ;-) The sad story is that SpamAssassin was installed at the University's email front-door and immediately deinstalled again. The reason was that it interfered badly with some virus-scanner and people are currently investigating how to solve the problems. Please don't start a thread now what is more important for grown-up users -- filtering spam or filtering viruses. I already did start such a thread over here and found out that people who prefer to have spam filtered out and don't care about MSVB scripts (i.e. "real men") seem to be a vanishing minority. :-(
I found that the following program
#include <ginac/ginac.h> #include <iostream> using namespace std; using namespace GiNaC;
int main() { symbol a("a"),b("b"); (-2*a-2*b).print(print_csrc_cl_N(cout)); cout << endl; return 0; }
gives as output:
cln::cl_F("-2.0")*bcln::cl_F("-2.0")*a
This does not compile since there should be a + between the b and the cln::cl_F. The problem disappears if I change the line
if (it != itend && !(it->coeff.info(info_flags::negative) || (it->coeff.is_equal(_num1) && is_exactly_a<numeric>(it->rest) && it->rest.info(info_flags::negative))))
which occurs in the file add.cpp to
if (it != itend && (is_a<print_csrc_cl_N>(c) || !(it->coeff.info(info_flags::negative) || (it->coeff.is_equal(_num1) && is_exactly_a<numeric>(it->rest) && it->rest.info(info_flags::negative)))))
Now the output of the test program is
cln::cl_F("-2.0")*b+cln::cl_F("-2.0")*a
which compiles correctly.
Thanks a lot for catching this. I've applied it in CVS. Cheers -richy. -- Richard B. Kreckel <Richard.Kreckel@GiNaC.DE> <http://www.ginac.de/~kreckel/>
participants (2)
-
Chris Dams
-
Richard B. Kreckel