Visual Basic - me falla la funcion MOD con numeros double

Life is soft - evento anual de software empresarial
 
Vista:

me falla la funcion MOD con numeros double

Publicado por Jose Maria (2 intervenciones) el 09/09/2004 23:54:48
Hola a todos y gracias por adelantado. Mi problema es el siguiente:
Necesito obtener el resto entre dos numeros muy grandes y cuando uso la funcion mod me da:
Error '6' en tiempo de ejecucion: desbordamiento.
Buscando en MSDN he visto que se puede calcular el resto manualmente, pero aparte de que no parece hacerlo muy bien, a partir de un numero de veces x ya no funciona. Les pongo el codigo para que entiendan mejor lo que quiero hacer y agradeceria cualquier ayuda gracias.

Dim n As Double
Dim x As Integer
Dim y As Double
Dim q As Double
Dim w As Double
Dim f(36) As Double

n = 4294967297#

For x = 0 To 36

y = 1 + (x ^ 8)
q = y * y * y
f(x) = q Mod y
'f(x) = q - Int(q / n) * n

'MsgBox f(x)
Next x
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:me falla la funcion MOD con numeros double

Publicado por Ruri (583 intervenciones) el 10/09/2004 02:27:24
José María:
Al principio tu problema me pareció extraño, pues MOD trabaja con cualquier tipo de dato numérico, pero si lles la documentación esta dice:

"Generalmente, el tipo de dato de resultado es tipo Byte, Byte tipo variant, tipo Integer, Integer tipo variant, tipo Long o tipo Variant que contiene un tipo Long, independientemente de si el resultado es un número entero o no. La parte fraccionaria se trunca. Sin embargo, si cualquiera de las expresiones esNull, el resultado es también Null. Toda expresión Empty se considera como 0"

Fijate que el mayor valor que devuelve es un long (4228250625) El resultado de la operación MOD debe estar superando el tamaño de un long. Fijate que para x=3, y=282429536481 ( mayor que 422825062), es decir que el resultado de la operación y*y*y mod y es un valor entre 0 y 282429536480, con lo cual superás el long. Para resolver el problema podés utilizar el algoritmo de la división y utilizar este código:

Dim n As Double, x As Integer, y As Double, q As Double, w As Double, f(36) As Double
n = 4294967297#

For x = 0 To 36

y = 1 + (x ^ 8)
q = y * y * y
'f(x) = q Mod y

f(x) = q - y * (Int(q / y))

'MsgBox f(x)
Debug.Print f(x)
Next x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:me falla la funcion MOD con numeros double

Publicado por Jose Maria (2 intervenciones) el 12/09/2004 22:25:19
Gracias Ruri, por la aclaracion. Eres muy amable. Voy a probar a ver que tal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar