Internal error: statement in file ./real/conv/cl_R_to_double.cc, line 55 has been reached!!
Hi, -------------------- this output -------------------- Pi=3.1415926535897932385 Internal error: statement in file ./real/conv/cl_R_to_double.cc, line 55 has been reached!! Please send the authors of the program a description how you produced this error! -------------------- has been produced by -------------------- #include <iostream> #include <sstream> #include <stdexcept> #include <ginac/ginac.h> using namespace std; using namespace GiNaC; int main() { cout << "Pi=" << Pi.evalf() << endl; if (is_a<constant>(Pi)) { double f = ex_to<numeric>(Pi).to_double(); cout << f << endl; } return 0; } --------------------------------------------- on debian (etch testing) with libginac1.3c2a. --------------------------------------------- It was a first example i tried to do in order to understand ginac/cln concepts: <ex> <constant> and <numeric>. How to convert from Pi to C++ double type in one C++ line ? Thanks, Pedro Cruz
Hello! On Fri, Dec 08, 2006 at 12:14:42PM +0000, Pedro Cruz wrote:
Hi,
-------------------- this output --------------------
Pi=3.1415926535897932385 Internal error: statement in file ./real/conv/cl_R_to_double.cc, line 55 has been reached!! Please send the authors of the program a description how you produced this error!
-------------------- has been produced by --------------------
#include <iostream> #include <sstream> #include <stdexcept> #include <ginac/ginac.h> using namespace std; using namespace GiNaC;
int main() { cout << "Pi=" << Pi.evalf() << endl;
if (is_a<constant>(Pi)) { double f = ex_to<numeric>(Pi).to_double(); cout << f << endl; }
return 0; }
ex_to is unsafe function (this is documented in the manual), so you should check if the expression in question is really of type T before converting it with ex_to<T> (unless you *really* know what are you doing). Pi is not numeric, but a contstant, so your code is expected to fail.
--------------------------------------------- on debian (etch testing) with libginac1.3c2a. ---------------------------------------------
It was a first example i tried to do in order to understand ginac/cln concepts: <ex> <constant> and <numeric>.
How to convert from Pi to C++ double type in one C++ line ?
Quoting the manual: "GiNaC keeps algebraic expressions, numbers and constants in their exact form. To evaluate them using floating-point arithmetics you need to call ex ex::evalf(int level = 0) const;" So, use something like this: double f = ex_to<numeric>(Pi.evalf()).to_double(); Also you could try this patch: http://www.ginac.de/pipermail/ginac-list/2006-October/000993.html Using this patch the same code can be written as: double f; numconv_to(Pi, f); Best regards, Alexei -- All science is either physics or stamp collecting.
participants (2)
-
Pedro Cruz
-
varg@theor.jinr.ru