7

次の整数算術プロパティは成り立ちますか?

(m/n)/l == m/(n*l)

最初は答えはわかっていると思いましたが(当てはまりません)、今はわかりません。それはすべての数に当てはまりますか、それとも特定の条件にのみ当てはまりn > lますか?

この質問は、コンピュータの算術、つまりq = n/m, q*m != nオーバーフローを無視することに関係しています。

4

2 に答える 2

12
Case1 assume m = kn+b (b<n),
left = (m/n)/l = ((kn+b)/n)/l = (k+b/n)/l = k/l (b/n=0, because b<n)
right = (kn+b)/(n*l) = k/l + b/(n*l) = k/l (b/(n*l)=0, because b<n)
=> left = right

Case2 assume m = kn,
left = (m/n)/l = (kn/n)/l = k/l
right = kn/(n*l) = k/l
=> left = right

So, (m/n)/l == m/(n*l)
于 2010-04-14T02:58:18.713 に答える
5

あなたは数学的な整数について話しているのですか?またはプログラミング言語内の固定幅整数?

2つの方程式は数学整数と同じですが、固定幅の整数を使用している場合、2つの関数のオーバーフロー動作は異なります。

たとえば、整数が32ビットであるとします。

(1310720000/65536)/65537 = 20000/65537 = 0

ただし、65536 * 65537は32ビット整数をオーバーフローし、65536に等しくなるため、

1310720000/(65536*65537) = 1310720000/65536 = 20000
于 2010-04-14T03:03:39.377 に答える