假設我有三個整數,x,y和w。我需要爲z解決方程x/y = z/w
。 (這種情況的一個特別普遍需要的是一些分數的百分比的轉換:x = 20, y = 40, 20/40 = z/100
)如何使用整數運算法求解方程x/y = z/w?
簡單地計算這個作爲z = x/y * w
使用整數總是會產生0時y > x
當不用時會產生不準確的答案。將此計算爲z = x * w/y
將產生錯誤的答案,因爲x或w的高值溢出,即使x < = y時也是如此。
一個顯而易見的解決方案是將輸入轉換爲浮點,然後將輸出轉換回整數,但這似乎是一個普遍存在的問題,需要採用更多創新的解決方案。
另外:如果w比最大可表示值大1,對於uint
,w = 2^32
?這可以用整數數學來表示嗎?
我發現,對於y <= w'和'abs(x)<= y' - 這是我現在最重要的一個 - 可以精確計算爲'x *(w/y )+((w%y)/(y/x))' – Pineapple
對於'w = uint.max + 1'和'abs(x)
Pineapple
處理y> w並不容易解決的情況該死的 – Pineapple