占用了将Visual Fox Pro emigrarlo迁移到C#的方法,我遇到的问题是如何知道Visual Fox Pro中的方法:
Rand(intValue)
方法等于dotNet:
Random r = new Random (intValue);
r.Next return ();
假设intValue = 971,dotNET中生成的结果是2027119,但我需要等于返回FoxPro。
主要问题: 我如何确保得到相同的结果?
次要问题: 你知道任何在线工具狐狸亲来证明这个方法给我的结果Rand()吗?
答案 0 :(得分:5)
主要问题:我如何确保得到相同的结果?
所以你想保证从两个不同的随机数生成器得到相同的结果......对。
FoxPro示例中的 intValue
是种子值。为什么在世界上你需要保证两个库使用相同的随机数生成器(提示:它们几乎肯定不会)。说真的,如果你追随的是随机数,它会有什么不同?
如果您想要一系列已知的数字,那么您根本不需要随机数。这令我难以置信。如果您的代码设置为期望来自随机数生成器的特定字符串值,则存在更大的问题。您也可以使用FoxPro中的数字生成一个地图,并从那里获取数字。
答案 1 :(得分:3)
实现此目的的唯一方法是使用一个方法创建一个Visual FoxPro COM对象,该方法获取种子值并返回生成的随机数,然后通过C#中的COM Interop使用它。
没有办法做出天生的C#DO THIS。所以别再问了。
答案 2 :(得分:2)
我不确定你为什么要这样做但是这里有一个Visual FoxPro Toolkit for .NET http://foxcentral.net/microsoft/vfptoolkitnet.htm它可能具有相同的rand生成器函数。
答案 3 :(得分:1)
你做不到。您正在设置种子值,但.NET和FoxPro使用完全相同的方法生成随机数的几率接近于零。但问题是,你为什么要这样呢?随机应该是随机的。
答案 4 :(得分:1)
你问的是可能的。您无法使用Foxpro和.NET框架提供给您的生成器。
大多数“随机”数字生成器只生成“看起来”或“感觉”随机的数字序列。它们的工作方式(非常简化):从“种子”值开始,应用变换并生成值,然后将变换应用于此值并获取下一个值。根据需要重复。变换是这样的,你可以期望值在给定的段内均匀分布,通常是[0,1)。我可以进一步解释这一点,但有大量的文献。搜索它。
现在,显然,如果您为任何给定的生成器提供相同的种子,您将反复获得相同的序列。
因此,要获得所需的结果,您需要在VFP和C#中实现自己的伪随机数生成器。请记住,有些事情可能会导致对生成器的连续调用,例如精度上的差异。
无论如何,你需要一个算法。转到此处:use of D.Knuth pseudo-random generator
希望这仍然有用。