#9129: sqrt memory leaks
--------------------------------+-------------------------------------------
Reporter: zimmerma | Owner: AlexGhitza
Type: defect | Status: new
Priority: critical | Milestone: sage-4.8
Component: basic arithmetic | Keywords:
Work_issues: | Upstream: N/A
Reviewer: | Author:
Merged: | Dependencies:
--------------------------------+-------------------------------------------
Comment(by zimmerma):
I added some print-statements in
{{{pynac-0.2.3.p0/src/ginac/numeric.cpp}}} as follows:
{{{
Number_T pow(const Number_T& base, const Number_T& exp) {
std::cerr << "enter pow, base=" << base << " exp=" << exp << "\n";
verbose("pow");
if (base.t != exp.t) {
Number_T a, b;
std::cerr << "coerce\n";
coerce(a, b, base, exp);
return pow(a,b);
}
switch (base.t) {
case DOUBLE:
std::cerr << "double\n";
return std::pow(base.v._double, exp.v._double);
case LONG:
// TODO: change to use GMP!
std::cerr << "long\n";
return std::pow((double)base.v._long, (double)exp.v._long);
case PYOBJECT:
std::cerr << "PYOBJECT\n";
if PyInt_Check(base.v._pyobject) {
PyObject* o = Integer(PyInt_AsLong(base.v._pyobject));
PyObject* r = PyNumber_Power(o, exp.v._pyobject, Py_None);
std::cerr << "PyInt_Check\n";
Py_DECREF(o);
return r;
}
return PyNumber_Power(base.v._pyobject, exp.v._pyobject, Py_None);
default:
stub("invalid type: pow Number_T");
}
}
}}}
Then it seems that for inexact powers that function is called twice for SR
input:
{{{
sage: SR(2).__pow__(1/2)
enter pow, base=2 exp=1/2
PYOBJECT
enter pow, base=2 exp=1/2
PYOBJECT
sqrt(2)
}}}
but for exact powers only once:
{{{
sage: SR(4).__pow__(1/2)
enter pow, base=4 exp=1/2
PYOBJECT
2
}}}
For Integer input we get:
{{{
sage: Integer(2).__pow__(1/2)
enter pow, base=2 exp=1/2
PYOBJECT
sqrt(2)
sage: Integer(4).__pow__(1/2)
2
}}}
For ZZ input we get:
{{{
sage: ZZ(2).__pow__(1/2)
enter pow, base=2 exp=1/2
PYOBJECT
sqrt(2)
sage: ZZ(4).__pow__(1/2)
2
}}}
In all cases there is no memory leak for exact powers, but there is for
inexact powers.
Thus I strongly suspect some special code that detects exact powers, but
where is it?
Paul
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9129#comment:20>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.