He seguido este tutorial ( http://web.eecs.utk.edu/~jplank/plank/papers/CS-96-332.pdf ) que introduce la codificación Reed-Solomon y, por tanto, cubre campos finitos. Mi problema es con uno de los ejemplos de cómo se consultan las tablas de logaritmos y antilogaritmos para realizar una división. He incluido una imagen de los ejemplos y la tabla a continuación:
El tutorial está escrito para programadores, por lo que $gflog[i]$ es realmente $log_2(i)$ y $gfilog[i]$ est $log_2^{-1}(i)$ .
Soy capaz de seguir todos los ejemplos menos el último. He utilizado una calculadora de campo finito en línea que indica que el resultado debería ser $10$ . El resultado en el ejemplo es $14$ al principio supongo que se trata de un simple error al buscar el resultado en la fila incorrecta (es decir, al buscar la fila $log_2(i)$ en lugar de la fila $log_2^{-1}(i)$ fila) como tabla muestra correctamente el resultado debería ser $10$ .
Pero si lo examinamos más detenidamente, su aritmética para la indexación en la tabla parece estar mal para el ejemplo final, $gfilog[4-10] = gfilog[9]$ . ¿No debería ser el resultado $gfilog[10]$ ?
Ahora mi lo que sospechoso lo que ocurre es que la aritmética de los índices es aritmética de enteros regulares. Y en este caso, $4-10$ resulta en $-6$ . Dado que se trata de un índice no válido, y las tablas de registro son más de $GF(2^4)$ la posición correcta de $-6$ viene determinada por $-6 mod 16$ que da $10$ . Sin embargo $10$ es sólo el rango del índice correcto y pas el propio índice. Por lo tanto, la 10ª posición de la tabla está realmente en el 9º índice. De ahí que $gfilog[9] = 10$ .
¿Lo he entendido correctamente? Lo he probado con otros valores y parece que funciona. Esto es todo muy nuevo para mí, así que por favor, elaborar un poco en sus respuestas como mi formación es principalmente en la programación :)