为什么我的方程式计算不正确?

Why isnt my equation evalutaing correctly?

所以我正在为 Python 中的一个 uni 项目制作一个 BCH 解码器。它采用有错或无错的 10 位代码字,并且应该检测并纠正它发现的任何错误。对于双重纠错,有一个数学公式可以检测这些错误的位置和大小:
formula for error pos and mag

i = (-Q + ((Q^2-4*P*R)^(1/2))/2*P)<br/>
j = (-Q - ((Q^2-4*P*R)^(1/2))/2*P)

b = (i*s1-s2)/(i-j)<br/>
a = s1-b

我已经正确计算出QPR和s1,s2
因此,我正在使用此示例 (2 error BCH example) 进行调试。它的编号 8888880747 被传输到 8899880747,因此位置 3 和 4 中存在 2 错误,幅度均为 1。到目前为止,我的程序生成了正确的 syndromes(s1 to s4 - 2,7,3,3)和正确的 PQR 值 (10,7,10) 但是在计算 i 和 j 时,我得到的值与示例不同 - 10.710.6 而不是 34. 这是我的 i 和 j 代码:

#work out error positions i and j
sqrt = ((Q**2 - 4*P*R) % 11)**(1/2)
i = (((-Q+sqrt)/(2*P))%11)
j = (((-Q-sqrt)/(2*P))%11)

谁能看出我做错了什么?谢谢。

运算是要在GF(11)中进行的,也就是说要进行mod11,平方根和除法mod11跟他们不一样都是实数。

有高级算法可以计算平方根和 mod 平方根,但对于小至 11 的数字,您可以使用蛮力或预先计算 table。在这里遵循第一原则。对于 sqrt(x),请尝试 [0,1,2,...10] 并查看平方等于 x 时哪个。那就是平方根。对于除法(逆),1/x,尝试 [0,1,2,...10] 并查看乘以 x 时哪个等于 1 mod 11。现在我们插入这些值以获得 i = 3, j = 4.

所以,通过计算 mod 11,我们有:

P, Q, R = (10,7,10) (Q**2 - 4*P*R) = -351, -351 % 11 = 1 这很方便,因为 1 的平方根就是 1 mod 11。 查看接下来的两个方程式,我们将需要计算 1/(2*P) mod 11,换句话说,我们需要找到 2*P mod 11 的倒数,即(2P)-1mod11. 2*P % 11 = 20 % 11 = 9。通过尝试所有的可能性,我们发现 9-1 mod 11 是 5.