[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.
What is your position?
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
More information about the PURRS-devel
mailing list