4

688^79 mod 3337 = 1570.

これを wolfram alpha で試したところ、次の結果が得られました。 ここに画像の説明を入力

しかし、Matlab で同じことを入力すると、答えとして 364 が得られます。私は何か間違ったことをしなければなりません。

ここに画像の説明を入力

これに関する任意の光をいただければ幸いです。

4

2 に答える 2

11

その理由は、Matlab がdoubleデフォルトで浮動小数点演算を使用するためです。688^79 のような大きな数値は、 として正確に表現できませんdouble。(a として正確に表現できる最大の整数double2^53 のオーダーです)。

正しい結果を得るには、シンボリック変数を使用できます。これにより、精度が失われないことが保証されます。

>> x = sym('688^79');
>> y = sym('3337');
>> mod(x, y)
ans =
1570
于 2015-04-26T23:32:40.670 に答える
3

私の計算機は、Wolfram と同じ答えを私に送ってくれます。688^79 の値も計算したので、Wolfram が正しいと信じがちです。おそらく、このような膨大な数で Matlab の容量を超えてしまい、それが正しい回答を送信しなかった理由です。

于 2015-04-26T23:28:00.130 に答える