-
-
Notifications
You must be signed in to change notification settings - Fork 673
Description
The following happens at least since sage-4.6.2 and was detected in #4539 by a new doctest:
sage: P.<x,y> = QQ[]
sage: y^2^30
y^1073741824
sage: P.<x,y,z> = QQ[]
sage: y^2^30
0
According to Hans, the maximal exponent of a variable in a monomial does depend on the number of variables in the ring. There is no function that returns that maximal exponent, but it is stored in the bitmask
attribute of a ring. The Singular interpreter actually only tests whether the total degree is below what is provided by bitmask; in theory, any exponent (not only the totall degree) can go up to that bound.
Here is the corresponding code in Singular's iparith.cc
:
static BOOLEAN jjTIMES_P(leftv res, leftv u, leftv v)
{
poly a;
poly b;
int dummy;
if (v->next==NULL)
{
a=(poly)u->CopyD(POLY_CMD); // works also for VECTOR_CMD
if (u->next==NULL)
{
b=(poly)v->CopyD(POLY_CMD); // works also for VECTOR_CMD
if ((a!=NULL) && (b!=NULL)
&& (pTotaldegree(a)+pTotaldegree(b)>si_max((long)rVar(currRing),(long)currRing->bitmask)))
{
Werror("OVERFLOW in mult(d=%ld, d=%ld, max=%ld)",
pTotaldegree(a),pTotaldegree(b),currRing->bitmask);
pDelete(&a);
pDelete(&b);
return TRUE;
...
Apply
Depends on #10903
CC: @malb @burcin @alexanderdreyer @sagetrac-jakobkroeker
Component: commutative algebra
Keywords: exponent overflow
Author: Simon King
Reviewer: Martin Albrecht, Alexander Dreyer
Merged: sage-4.7.2.alpha4
Issue created by migration from https://trac.sagemath.org/ticket/11856