Problemas de desbordamiento (vb error:6)

Tengo cierto problema con un algoritmo de encriptación. Resulta ser que estoy programando el algoritmo Diffie-Hellman en VB pero al tratar de hacer el módulo de la división de la potencia( a^b mod c) ocurre un error de desbordamiento. Mi pregunta es la siguiente:
¿Cómo puedo eliminar el desbordamiento y hacer los cálculos que necesito?, según vb los números de tipo Double tienen cabida para un rango de hasta e^308 según creo, pero aún declarando las variables de esta forma, este error sigue ocurriendo. ¿Hay alguna forma de eliminarlo o hacer estos cálculos de otra manera sin que ocurra desbordamiento?

1 respuesta

Respuesta
1
La solución es más fácil de lo que te planteas, el problema que tienes es que sobrepasas la precisión del dividendo de la operación mod.
Para solucionar el problema, te recomiendo :
1.- Te generas tu función mod. Sencillo, dividiendo por el divisor y calculando el resultado y el resto, hasta que el resultado sea menor que el divisor (recomiendo recursividad)
2.- Usas la función mod, pero reduces la precisión del dividendo mediante restos del divisor hasta que el resultado sea algo que acepte mod.
Te agradecería que me pudieras explicar un poco más a detalle la solución; resulta que apenas empiezo con VB y casi no entiendo mucho.
Una disculpa, saludos!.
El tipo de entrada de Mod es un integer.
Como pasas un número que supera la precisión, debes usar una función que acepte enteros largos. Si superas la precisión de los enteros largos entonces deberás juntar variables por ti mismo.
Para números enteros positivos largos, siempre que el dividendo sea positivo y el divisor también, la función puede ser una como esta. (La he hecho en un instante, mejorala porque es muy lenta y cutre.)
Public Function Resto(ByVal Dividendo As Long, ByVal Divisor As Long) As Long
While Dividendo > Divisor
Dividendo = Dividendo - Divisor
Wend
Resto = Dividendo
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas