Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mod函数为Matlab返回0_Matlab_Elliptic Curve - Fatal编程技术网

Mod函数为Matlab返回0

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

我对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('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