Mod 函数 returns 0 for Matlab

Mod function returns 0 for Matlab

我对 Matlab 中的 mod 函数输出有疑问。我正在尝试对 ECC double 和 add 算法执行一些计算。我正在从文件中读取数据并将其存储在变量中,然后执行一些操作。除了当我使用 mod(X2,P) 时我在 temp1 中得到 0 之外,一切都很顺利。但是,如果我在命令 window (mod( 3.0323e+153, 1.1579e+77)) 中输入存储在 X2(3.0323e+153)P(1.1579e+77) 中的值,我会得到正确的值。谁能帮帮我吗?以下是脚本中有问题的部分。

P = hex2dec('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F');
line = fread(fileID,[1,67],'*char');
while ~feof(fileID)
        PX = line(4:67);
        X = hex2dec(PX);
        X2 = X^2;
        temp1= mod(X2 , P)
    end
    line = fread(fileID,[1,69],'*char');
end
fclose(fileID);

我认为问题在于您如何初始化 P。来自 hex2dec 的文档(强调我的):

d = hex2dec('hex_value') converts hex_value to its floating-point integer representation. The argument hex_value is a hexadecimal integer stored as text. If the value of hex_value is greater than the hexadecimal equivalent of the value returned by flintmax, then hex2dec might not return an exact conversion.

flintmax的值为:

>> flintmax
ans =
     9.007199254740992e+15

比您 P 的值小很多。其实如果我们用num2hex来看一下你初始化P的两种方式,可以看出明显的区别:

>> P = hex2dec('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F');
>> num2hex(P)
ans =
4ff0000000000000
>> num2hex(1.1579e+77)
ans =
4fefffda293c30de

事实证明,hex2dec 进行的不精确转换导致一个数被均匀地分成 3.0323e+153,因此余数为 0:

>> mod(3.0323e+153, P)
ans =
     0
>> mod(3.0323e+153, 1.1579e+77)
ans =
     8.795697942083107e+76