我正在从事计算几何的工作,其中算法的鲁棒性很重要。在两个不同的场合,我遇到了一个场景,我比较了两个表达式的数值大小,最终的不等式最终看起来像这样:
在哪里,和是整数。我只关心谓词的值。本能地,我尝试对双方进行平方,但当然这并没有消除平方根项。
我的问题。有没有办法只使用整数(计算机)算术来确定这样的谓词的真值?
我正在从事计算几何的工作,其中算法的鲁棒性很重要。在两个不同的场合,我遇到了一个场景,我比较了两个表达式的数值大小,最终的不等式最终看起来像这样:
在哪里,和是整数。我只关心谓词的值。本能地,我尝试对双方进行平方,但当然这并没有消除平方根项。
我的问题。有没有办法只使用整数(计算机)算术来确定这样的谓词的真值?
认为(否则很容易)。检查, 然后平方一次得到
但是这有一个重要的问题:使用整数运算,您必须防止溢出。例如,当计算和-bit 整数,这将溢出.
顺便说一句,您只需一行 Mathematica 就可以得出最后一个不等式:
GroebnerBasis[{c - u - v, u^2 - a, v^2 - b}, {a, b, c}, {u, v}]
这使:
在圣人中也是如此:
R.<a,b,c,u,v> = PolynomialRing(QQ, 'a b c u v')
I = R.ideal([c-u-v, u**2-a, v**2-b])
I.elimination_ideal([u,v])
输出
Ideal (c^4 - 2*a*c^2 - 2*b*c^2 + a^2 - 2*a*b + b^2) of \
Multivariate Polynomial Ring in a, b, c, u, v over Rational Field