Mod函数为Matlab返回0
我对Matlab中的Mod函数为Matlab返回0,matlab,elliptic-curve,Matlab,Elliptic Curve,我对Matlab中的mod函数输出有问题。我正在尝试执行一些ECC double和add算法的计算。我从文件中读取数据并将其存储在变量中,然后执行一些操作。当我使用mod(X2,P)时,除了在temp1中获得0之外,所有操作都很顺利。但是,如果我在命令窗口(mod(3.0323e+153,1.1579e+77))中输入存储在X2(3.0323e+153)和P(1.1579e+77)中的值,我会得到正确的值。有人能帮我吗?下面是脚本中有问题的部分 P = hex2dec('FFFFFFFFFFFF
mod
函数输出有问题。我正在尝试执行一些ECC double和add算法的计算。我从文件中读取数据并将其存储在变量中,然后执行一些操作。当我使用mod(X2,P)
时,除了在temp1
中获得0
之外,所有操作都很顺利。但是,如果我在命令窗口(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
。根据(重点矿山)的文件:
d=hex2dec('hex_值')
将hex_值转换为其浮点整数表示形式。参数hex_值是存储为文本的十六进制整数如果hex_value的值大于flintmax返回值的十六进制等效值,则hex2dec
可能不会返回精确转换。
其价值是:
比p
的值小很多。事实上,如果我们使用两种方法来初始化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无法处理256位数字算法。你知道有哪一个库或附加组件可以与MATLAB一起进行256位运算吗?@Eshaal:也许是从符号数学工具箱中获得的?
>> mod(3.0323e+153, P)
ans =
0
>> mod(3.0323e+153, 1.1579e+77)
ans =
8.795697942083107e+76