3 回答
TA贡献1846条经验 获得超7个赞
如您所知,Python的内置类型可以处理任意大的整数,但该类型具有有限的精度。代码中唯一处理非 s 数字的部分似乎是以下函数:intfloatint
def findYint(x,y):
slope = (y[1] - y[0]) / (x[1] - x[0])
yint = int(y[0] - slope * x[0])
return yint
这里的除法结果为 a ,即使结果与 .此外,我们不能安全地在这里用运算符进行整数除法,因为在截断应该发生之前,它将乘以。floatint//slopex[0]
因此,要么您需要做一些代数才能仅使用s获得相同的结果,要么您需要使用精确的非整数类型而不是来表示分数(y 1 - y 0)/ (x1 - x0)。幸运的是,Python的标准库有一个名为Refute的类,它将做你想要的:intfloat
from fractions import Fraction
def findYint(x,y):
slope = Fraction(y[1] - y[0], x[1] - x[0])
yint = int(y[0] - slope * x[0])
return yint
TA贡献1890条经验 获得超9个赞
应该只能使用基于整数的数学来执行此操作:
def findYint(x,y): return (y[0] * (x[1] - x[0]) - (y[1] - y[0]) * x[0]) // (x[1] - x[0])
这样可以避免浮点算术及其精度约束。
TA贡献1921条经验 获得超9个赞
分数和所有整数数学的重写都很好。
对于真正的大整数,您可能会发现自己想要 https://pypi.org/project/gmpy/ 而不是内置int类型。我已经成功地用它来测试大素数。
或者,如果您确实想要带有小数点的数字,请尝试十进制。Decimal(“1”) - 例如。
添加回答
举报