4 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊
我總是使用自己的mod函數(shù),定義為
int mod(int x, int m) {
return (x%m + m)%m;
}
當(dāng)然,如果您不愿意兩次調(diào)用模數(shù)運(yùn)算,可以將其寫為
int mod(int x, int m) {
int r = x%m;
return r<0 ? r+m : r;
}
或其變體。
它起作用的原因是“ x%m”始終在[-m + 1,m-1]范圍內(nèi)。因此,如果完全為負(fù),則將其添加到m會將其置于正范圍內(nèi),而不會更改其模m值。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個贊
請注意,C#和C ++的%運(yùn)算符實(shí)際上不是模數(shù),而是余數(shù)。在您的情況下,所需的取模公式為:
float nfmod(float a,float b)
{
return a - b * floor(a / b);
}
您必須使用C#(或C ++)重新編碼,但這是獲得模數(shù)而不是余數(shù)的方式。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊
增加一些理解。
根據(jù)歐幾里得的定義,模結(jié)果必須始終為正。
例如:
int n = 5;
int x = -3;
int mod(int n, int x)
{
return ((n%x)+x)%x;
}
輸出:
-1
- 4 回答
- 0 關(guān)注
- 820 瀏覽
添加回答
舉報