Re: [GiNaC-list] cl_F_idecode.cc line 30 ?
I've since been able to archive an expression whose length is ~1200 lines... I'm at a loss. The only difference between the expressions that generate the error and the ones that don't seems irrelevant, but here it is. Based on the code fragment: ... ex c = TwoLoop2Pt(...); // c.nops() = 2 ex numeric = c.op(0); //returned for numerical integration ex analytic = c.op(1); //returned for analytic use, f(eps,...) ex ana_series = analytic.series(eps==0,2); ex ana_0 = ana_series.coeff(eps,0); ex ana_1 = ana_series.coeff(eps,-1); ex ana_2 = ana_series.coeff(eps,-2); ... numeric doesn't work (~1200 lines) ana_0 doesn't work (~1200 lines) ana_1 works (~1200 lines) ana_2 works (~600 lines) I guess there's either something fundamentally different between ana_0 and ana_1 (seems unlikely since they come from the same expression, c.op(1)) or there's a critical expression length right around 1200 lines. Perhaps some knowledge about cl_F_idecode.cc would help? Sincerely, Chris Bouchard ---- Original message ----
Date: Tue, 29 Jul 2008 16:08:22 -0500 (CDT) From: Chris Bouchard <cbouchrd@illinois.edu> Subject: [GiNaC-list] cl_F_idecode.cc line 30 ? To: GiNaC discussion list <ginac-list@ginac.de>
GiNaC mailing list,
I've run across an error with a notification request. The error occurs while trying to archive an expression. The error and request are:
"Internal error: statement in file ./float/misc/cl_F_idecode.cc, line 30 has been reached!! Please send the authors of the program a description how you produced this error!"
The file cl_F_idecode.cc is in the cln library and a snippet is given here, with a comment indicating line 30:
... namespace cln {
const cl_idecoded_float integer_decode_float (const cl_F& x) { floatcase(x , return integer_decode_float(x); , return integer_decode_float(x); , return integer_decode_float(x); , return integer_decode_float(x); ); // this is line 30 } }
After playing around with my archive code I'm beginning to think the error occurs when the expression being archived becomes too long. I haven't nailed down a critical expression length but 27 lines works while ~1200 lines generated the error.
I can't think of anything else that's changing.
The expressions are individual terms from series expansions of expressions returned from xloops function calls (eg. TwoLoop2Pt(...)) and don't contain any noticeably offensive pieces.
Sincerely, Chris Bouchard _______________________________________________ GiNaC-list mailing list GiNaC-list@ginac.de https://www.cebix.net/mailman/listinfo/ginac-list
Hello, On Tue, Jul 29, 2008 at 05:09:39PM -0500, Chris Bouchard wrote:
"Internal error: statement in file ./float/misc/cl_F_idecode.cc, line 30 has been reached!! Please send the authors of the program a description how you produced this error!"
It looks like invalid conversion of some numeric type to a (big)float.
I've since been able to archive an expression whose length is ~1200 lines... I'm at a loss.
I don't think the length of the expression has anything to do with your problem. In fact, I routinely (un)archive much bigger expressions (from ~100 Mb to 2 Gb) without any problems. Could you please insert the following code into your program #include <cln/cln.h> #include <cstdlib> #include <execinfo.h> namespace cln { void cl_abort() { static const unsigned max_frames = 64; void* frames[max_frames]; const unsigned actual_frames = ::backtrace(frames, max_frames); ::backtrace_symbols_fd(frames, actual_frames, 1); std::abort(); } } and post the output? Best regards, Alexei -- All science is either physics or stamp collecting.
On Wed, Jul 30, 2008 at 10:27:16AM +0400, Alexei Sheplyakov wrote:
On Tue, Jul 29, 2008 at 05:09:39PM -0500, Chris Bouchard wrote:
"Internal error: statement in file ./float/misc/cl_F_idecode.cc, line 30 has been reached!! Please send the authors of the program a description how you produced this error!"
It looks like invalid conversion of some numeric type to a (big)float.
I think I've reproduced it: $ cat numeric_archive.cpp #include <cln/cln.h> #include <ginac/ginac.h> #include <iostream> using namespace GiNaC; using namespace cln; int main(int argc, char** argv) { const cl_N n = complex(1, cl_float(3.0)); ex test = numeric(n); std::cout << "Let's try to archive " << test << std::endl; archive ar; ar.archive_ex(test, "test"); return 0; } $ g++ numeric_archive.cpp -lginac -lcln $ ./a.out Let's try to archive 1+3.0*I Internal error: statement in file ./float/misc/cl_F_idecode.cc, line 30 has been reached!! Please send the authors of the program a description how you produced this error! Best regards, Alexei -- All science is either physics or stamp collecting.
participants (2)
-
Alexei Sheplyakov
-
Chris Bouchard