# [PURRS-devel] Problem with CoStLy 0.2

Roberto Bagnara bagnara at cs.unipr.it
Tue Nov 19 11:11:01 CET 2002

```Dear Markus and Ingo,

we have a problem with CoStLy 0.2.  Basically, pow(x, y) throws
an exception when we believe it should not.  Here is what happens.
First, we invoke CoStLy's pow():

128             aci = pow(base_aci, exponent_aci);
(gdb) print base_aci
\$1 = {
real_part = {
INF = -0.73205080756888341,
SUP = -0.73205080756887086
},
imag_part = {
INF = 0,
SUP = 0
}
}
(gdb) print exponent_aci
\$2 = {
real_part = {
INF = -1,
SUP = -1
},
imag_part = {
INF = 0,
SUP = 0
}
}

We are now in CoStLy's pow(), at line 2719 of cimath.cpp, which reads

2719        return exp(n*ln(bas));

(gdb) print n
\$3 = (const cinterval &) @0xbfffe740: {
real_part = {
INF = -1,
SUP = -1
},
imag_part = {
INF = 0,
SUP = 0
}
}
(gdb) print bas
\$4 = (const cinterval &) @0xbfffe7e0: {
real_part = {
INF = -0.73205080756888341,
SUP = -0.73205080756887086
},
imag_part = {
INF = 0,
SUP = 0
}
}

We now hit lines 1367 and 1368 of cimath.cpp,
where the exception is thrown:

1367        if( (srez <= 0)&&(im_min==0) )//Argument intersects negative real axis.
1368          throw function_not_defined();

What is the recommended way out of this problem?
I mean, on the one hand we could say this is a bug in CoStLy:
a function_not_defined() is thrown when the function is defined.
On the other hand, your position may rightfully be that it is
the duty of the client code to only call pow() in a certain way.
All the best

Roberto

P.S.  If you are curious about what we are doing, please see
http://www.cs.unipr.it/purrs/.  The project is at a very
early stage, but you should get an idea of what it is about.

--
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it

```