OverflowException solo en VB.net, no en C #
con fines de autoeducación, intenté encontrar una forma de crear un mapa de altura por mí mismo. Busqué en Google un poco y encontré una función que crea números pseudoaleatorios.
public static float Noise(int x)
{
x = (x << 13) ^ x;
return (1f - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7FFFFFFF) / 1073741824.0f);
}
Como el idioma de elección para mí es VB.net, traduje esta función a:
Private Function Noise(ByVal x As Integer) As Double
x = (x << 13) Xor x
Return (1.0R - ((x * (x * x * 15731.0R + 789221.0R) + 1376312589.0R) And &H7FFFFFFF) / 1073741824.0R)
End Function
Si uso la versión C # obtengo resultados para valores de x de 1 a 100. Si uso la versión VB.net obtengo valores para x <6 pero unOverFlowException
para x = 6. Cuando desarme las partes de esta función, descubrí que la parte que se desborda es
(x * x * 15731.0R)
Entonces, mi primera pregunta es: ¿Por qué obtengo unOverflowException
en VB.net pero no en C #? Si un resultado intermedio es demasiado grande para su variable que lo contiene, debería ser demasiado grande sin importar el idioma que use.
Y mi segunda pregunta es: ¿qué puedo hacer para que funcione también en VB.net?
Gracias por sus respuestas.