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
我对 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 byflintmax
, thenhex2dec
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