Novato

Grupo: Miembro
Mensajes: 17
Registrado: 02/04/2005
Desde: trgna
Especialidad: romper makinas
Rank: ON

|
Pues ya solucioné los problemillas con el copro y pase el codigo
a ensamblador...
Resulta que el algoritmo es sensible a la precision con que trabaja la FPU.
uff, hasta que me di cuenta del error...
El código en C# trabaja con precision de 53 bits. asi que cambié el valor del
control de la fpu para adaptarlo a 53 bits de precision y voilá, ya obtengo los mismos resultados en ensamblador.
El problema lo genera el siguiente bucle:
fld qword ptr[K_0_15+edi*8]
fld X
@@: fld1
fsub st,st(1) ; (1-X)
fmul st,st(1) ; * x ; for ( i=0; i<N; i++ )
fmul st,st(2) ; * k ; X = k*X*(1-X);
fstp st(1)
dec ecx
jnz @B
fstp X
...
En el que si hay muchas iteraciones, la precisión entra en juego...
Por supuesto el sistema funciona con más precision, siempre que tanto
el cifrador como el descifrador trabajen igual.
Ahora bien, el cifrador de la web, con que precision de calculo trabaja, porque clave que yo calcule puede ser correcta para una precision de
64 bits y no para la web...
en fin, que opinais del tema?.
|