6678提供的GMPY的算法为什么和GMPY4的不一样?
GMPY的算法原型是什么?
感觉指令集说明提供的GMPY算法和GMPY4所用算法有关系,但有所区别,请问区别在哪里?
King Wang:
ti liu你好:
GMPY是新增的指令,比GMPY4有所增强。
其主要区别在于GMPY可以完成小于等于32次方的多项式的CRC计算,而GMPY4只能完成小于等于8次方的多项式计算。
谢谢!
GMPY的C函数实现过程如下:
uword gmpy(uword src1,uword src2,uword polynomial)
{
// the multiply is always between GF(2^9) and GF(2^32)
// so no size information is needed
uint pp;
uint mask, tpp;
uint I;
pp = 0;
mask = 0x00000100; // multiply by computing
// partial products.
for ( I=0; i<8; I++ ){
if ( src2 & mask ) pp ^= src1;
mask >>= 1;
tpp = pp << 1;
if (pp & 0x80000000) pp = polynomial ^ tpp;
else pp = tpp;
}
if ( src2 & 0x1 ) pp ^= src1;
return (pp) ; // leave it asserted left.
}
ti liu:
回复 King Wang:
我想你误会我的意思了,c语言代码在指令集解释中已经给出。我的疑惑是,gmpy并不是gmpy4的简单扩充位宽,为什么?有什么区别?gmpy指令的数学来源是什么?crc计算是指什么?
ti liu:
回复 King Wang:
我用他给的例程12345678*126 生成多项式87654321怎么也算不出来他给的结果。后来才发现原来他给的生成多项式其实应该是187654321,这样才能得出结果。anyway谢谢你的答案
King Wang:
回复 ti liu:
呵呵,这时伽罗华域的方程式,比如x4+x3+x+1,那么就可以表示为x4 = x3+x+1,对应的二进制就是1011,最高位是默认的。