簡體   English   中英

python 中的負數模運算

[英]modulo operation with negative numbers in python

我找到了模的這個定義

mod(a, n) = a - n * floor(a / n)

執行 integer 除法然后再次相乘意味着找到小於 a 且可被 n 整除且無余數的最大數。 從 a 中減去這個得到除法的余數,然后是模數。”來源:https://torstencurdt.com/tech/posts/modulo-of-negative-numbers/

它似乎幫助我直觀地理解,它適用於 a 和 n 均為正的情況以及 a 為負而 b 為正的情況。 例如:

-10 模式 3

-12 是小於 -10 可被 3 整除的最大數。所以余數是 -10-(-12)=2,這是正確的。

但是當我嘗試做 10 mod -3 我的答案是不正確的。 因為雖然 9 是小於 10 可被 -3 整除的最大數,但它會給出錯誤的答案,因為它會評估為 10-9=1。

相反,它應該是 10 -((-4)*(-3))=10-12=-2。

但 12 並不是小於 a 的最大數。

我了解如何使用 python 中的公式 a= (a//n)(n)+(a%n) 來求解答案。 但是有一個直觀的定義可以幫助我理解嗎?

Python 3 文檔給出了恆等式x == (x//y)*y + (x%y) ,從中可以推斷出x%y == x - (x//y)*y //表示“樓層划分”; x//y是最大的 integer 不大於x / y

對於x =10 和y= =-3, x / y為 -3⅓。 floor(-3⅓) 為 -4。 因此x//y為 -4。 那么x - (x//y)*y是 10 - (-4)*-3 = 10-12 = -2。

這是x%3的圖表: 在此處輸入圖像描述 這是x%-3的圖表: 在此處輸入圖像描述

我在這里找到了一個分析器 https://en.wikipedia.org/wiki/Remainder似乎有兩種類型的余數和一種編程語言選擇使用哪一種

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM