[GiNaC-devel] [PATCH] fix incorrect result: degree(c*x^(-1),
x^(-1)) gives zero
Alexei Sheplyakov
varg at theor.jinr.ru
Mon Feb 26 18:10:17 CET 2007
Hello!
degree(c*x^(-1), x^(-1)) (in ginsh notation) gives zero instead of
expected 1. On the other hand, degree(x^(-1), x^(-1))
and coeff(c*x^(-1), x^(-1)) work fine.
This patch makes degree (and ldegree) work correct with such arguments.
---
ginac/mul.cpp | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/ginac/mul.cpp b/ginac/mul.cpp
index dd96a70..9bbcd61 100644
--- a/ginac/mul.cpp
+++ b/ginac/mul.cpp
@@ -315,7 +315,11 @@ int mul::degree(const ex & s) const
epvector::const_iterator i = seq.begin(), end = seq.end();
while (i != end) {
if (ex_to<numeric>(i->coeff).is_integer())
- deg_sum += i->rest.degree(s) * ex_to<numeric>(i->coeff).to_int();
+ deg_sum += recombine_pair_to_ex(*i).degree(s);
+ else {
+ if (i->rest.has(s))
+ throw std::runtime_error("mul::degree() undefined degree because of non-integer exponent");
+ }
++i;
}
return deg_sum;
@@ -328,7 +332,11 @@ int mul::ldegree(const ex & s) const
epvector::const_iterator i = seq.begin(), end = seq.end();
while (i != end) {
if (ex_to<numeric>(i->coeff).is_integer())
- deg_sum += i->rest.ldegree(s) * ex_to<numeric>(i->coeff).to_int();
+ deg_sum += recombine_pair_to_ex(*i).ldegree(s);
+ else {
+ if (i->rest.has(s))
+ throw std::runtime_error("mul::ldegree() undefined degree because of non-integer exponent");
+ }
++i;
}
return deg_sum;
--
1.4.4.4
Best regards,
Alexei
--
All science is either physics or stamp collecting.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-devel/attachments/20070226/dbcc6833/attachment.pgp
More information about the GiNaC-devel
mailing list