abort() in __gmpz_realloc of symbolic expression with `gmp: overflow in mpz type`

28 views
Skip to first unread message

Georgi Guninski

unread,
Sep 4, 2022, 9:58:20 AM9/4/22
to sage-...@googlegroups.com
sage 9.0 on ubuntu 20.

When raising symbolic expression to large integer power
i get abort() with stack:

gmp: overflow in mpz type

/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f26d1c7a859]
/lib/x86_64-linux-gnu/libgmp.so.10(__gmpz_realloc+0xad)[0x7f26d048edcd]
/lib/x86_64-linux-gnu/libgmp.so.10(__gmpz_n_pow_ui+0x7e7)[0x7f26d048ba97]
/lib/x86_64-linux-gnu/libpynac.so.18(_ZNK5GiNaC7numeric5powerEl+0x114)[0x7f26683b1c14]

The non-minimal testcase
===
def binnk3u(n,k): return ( (n/k)**(k))
n1=(2*10**3);d0=29004853178239;n0=SR(log(n1));tt=binnk3u(n0+d0-1,(d0))
print("passed :(")
===

on sagecell i get no output, just an animated rotating circle.

if possible please don't regress the following, which works:

sage: log(pi)**(2**80)
log(pi)^1208925819614629174706176

Vincent Delecroix

unread,
Sep 4, 2022, 1:32:27 PM9/4/22
to sage-devel
Indeed, there is something wrong with the error handling of exponents

{{{
sage: a = 2 ** (2**63)
Traceback (most recent call last):
...
.../sage/rings/integer.pyx in sage.rings.integer.Integer._pow_
2229 r = smallInteger(1)
2230 else:
-> 2231 raise OverflowError(f"exponent must be at most {LONG_MAX}")
2232 if mpz_sgn(exp) >= 0:
2233 return r

OverflowError: exponent must be at most 9223372036854775807
}}}
but
{{{
sage: a = 2 ** (2**62)
Traceback (most recent call last):
...
.../sage/rings/integer.pyx in sage.rings.integer.Integer.__pow__
2149
2150 if type(left) is type(right):
-> 2151 return (<Integer>left)._pow_(right)
2152 elif isinstance(left, Element):
2153 return coercion_model.bin_op(left, right, operator.pow)

.../sage/rings/integer.pyx in sage.rings.integer.Integer._pow_
2213
2214 if mpz_fits_slong_p(exp):
-> 2215 return self._pow_long(mpz_get_si(exp))
2216
2217 # Raising to an exponent which doesn't fit in a long overflows

.../sage/rings/integer.pyx in sage.rings.integer.Integer._pow_long
2245 if n > 0:
2246 x = PY_NEW(Integer)
-> 2247 sig_on()
2248 mpz_pow_ui(x.value, self.value, n)
2249 sig_off()

RuntimeError: Aborted
> --
> You received this message because you are subscribed to the Google Groups "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/CAGUWgD_Un568rw_RfAUmS3YaGiwV4sGh49oVsUkGEC3gvbV1rA%40mail.gmail.com.

dmo...@deductivepress.ca

unread,
Sep 4, 2022, 5:59:23 PM9/4/22
to sage-devel
I created trac ticket #34492 to continue this discussion, but it may require an upstream fix in gmp.
Reply all
Reply to author
Forward
0 new messages