【发布时间】:2016-03-30 14:01:51
【问题描述】:
出于自我教育的目的,我试图找到一种自己创建高度图的方法。 我google了一下,找到了一个创建伪随机数的函数。
public static float Noise(int x)
{
x = (x << 13) ^ x;
return (1f - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7FFFFFFF) / 1073741824.0f);
}
由于我选择的语言是 VB.net,我将此函数翻译为:
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
如果我使用 C# 版本,我会得到从 1 到 100 的 x 值的结果。如果我使用 VB.net 版本,我会得到 xOverFlowException。当我反汇编这个函数的部分时,我发现溢出的部分是
(x * x * 15731.0R)
所以,我的第一个问题是:为什么我在 VB.net 中得到 OverflowException 而在 C# 中却没有?如果中间结果对于它的包含变量来说太大了,无论我使用什么语言,它都应该太大了。
我的第二个问题是:我该怎么做才能让它在 VB.net 中也能正常工作?
感谢您的回答。
【问题讨论】: