-3

占用将Visual Fox Pro emigrarlo迁移到C#中的一个方法,我遇到的问题是如何知道Visual Fox Pro中的方法:

Rand(intValue)

方法等于 dotNet:

Random r = new Random (intValue);
r.Next return ();

假设 intValue = 971 在 dotNET 中生成的结果是 2027119,但我需要等于返回 FoxPro。

主要问题:我如何确保得到相同的结果?

次要问题:你知道有什么在线工具fox pro可以证明这个方法给我的结果是Rand()吗?

4

5 回答 5

5

主要问题:我如何确保得到相同的结果?

所以你想保证你得到相同的结果......来自两个不同的随机数生成器......对。

intValue在您的 FoxPro 示例中是种子值。为什么你需要保证这两个库使用相同的随机数生成器(提示:它们几乎肯定不会)。说真的,如果你追求随机数,它有什么区别?

如果你想要一个已知的数字系列,那么你真的根本不想要一个随机数。这让我大吃一惊。如果您的代码设置为期望来自随机数生成器的特定字符串,那么就会出现更大的问题。您也可以使用 FoxPro 中的数字生成地图并从那里获取数字。

于 2012-06-05T21:54:17.000 回答
3

实现此目的的唯一方法是创建一个 Visual FoxPro COM 对象,该对象具有一个获取种子值并返回生成的随机数的方法,然后通过 C# 中的 COM 互操作使用它。

没有办法让原生 C# 做到这一点。所以别问了。

于 2012-06-06T07:30:21.487 回答
2

我不确定您为什么要这样做,但这里有一个 Visual FoxPro Toolkit for .NET http://foxcentral.net/microsoft/vfptoolkitnet.htm它可能具有相同的 rand 生成器功能。

于 2012-06-05T21:56:26.263 回答
2

你问的是可能的。您只是不能使用 Foxpro 和 .NET 框架提供给您的生成器。

大多数“随机”数字生成器只生成“看起来”或“感觉”随机的数字序列。它们的工作方式是这样的(非常简化):从“种子”值开始,应用转换并生成一个值,然后将转换应用于该值并获得下一个。根据需要重复。转换是这样的,您可以期望值在给定段内均匀分布,通常是 [0,1)。我可以进一步解释这一点,但是周围有很多文献。搜索它。

现在,显然,如果您为任何给定的生成器提供相同的种子,您将一遍又一遍地获得相同的序列。

因此,要获得您想要的结果,您需要在 VFP 和 C# 中实现自己的伪随机数生成器。请记住,诸如精度差异之类的事情可能会使对生成器的连续调用产生分歧。

无论如何,您将需要一个算法。去这里:使用 D.Knuth 伪随机生成器

希望这仍然有用。

于 2012-08-20T14:44:32.040 回答
1

你不能。您正在设置种子值,但 .NET 和 FoxPro 使用完全相同的方法生成随机数的机会接近于零。但问题是,你为什么要这个?随机应该是随机的。

于 2012-06-05T21:53:30.127 回答