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”) - 例如。
添加回答
舉報