Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何复制PHP';s-PRNG算法在C#中的实现?_C#_Php_Random - Fatal编程技术网

如何复制PHP';s-PRNG算法在C#中的实现?

如何复制PHP';s-PRNG算法在C#中的实现?,c#,php,random,C#,Php,Random,我创建了一个程序图像生成器,它使用PHP5中内置的默认伪随机数生成器 我可以用mt_srand($id)设置种子并始终获得相同的数字序列(使用mt_rand(0255);) 我需要的是: 在PHP和C中工作方式完全相同的PRNG实现# 示例: PHP: mt_srand(123); 埃科穆兰(0255)//返回34 埃科穆兰(0255)//返回102 埃科穆兰(0255)//返回57 埃科穆兰(0255)//返回212 埃科穆兰(0255)//返回183 C#: setSeed(123);

我创建了一个程序图像生成器,它使用PHP5中内置的默认伪随机数生成器

我可以用
mt_srand($id)设置种子并始终获得相同的数字序列(使用
mt_rand(0255);


我需要的是: 在PHP和C中工作方式完全相同的PRNG实现#


示例:

PHP:

mt_srand(123);
埃科穆兰(0255)//返回34
埃科穆兰(0255)//返回102
埃科穆兰(0255)//返回57
埃科穆兰(0255)//返回212
埃科穆兰(0255)//返回183
C#:

setSeed(123);
打印getRand(0255)//返回34
打印getRand(0255)//返回102
打印getRand(0255)//返回57
打印getRand(0255)//返回212
打印getRand(0255)//返回183
(^函数名不是指现有的函数名,只是为了举例而命名)

谢谢您的提示

我解决了自己在C#和PHP中实现自定义PRNG算法的问题

由于我很快就需要它,而且没有时间研究整个Mersenne Twister理论和两种语言的不兼容性(例如类型和运算符的不同行为…),我决定编写一个非常简单的PRNG算法:

C#

代码:

使用系统;
公开课
{
私有静态int树=0;
公共无效植物种子(int种子)
{
tree=Math.Abs(seed)%999999+1;
格特兰(09999999);
}
公共整数getRand(整数最小值,整数最大值)
{
树=(树*125)%2796203;
返回树%(最大最小值+1)+最小值;
}
}
用法:

int-seed=123;
int min=0;
int max=255;
CiaccoRandom randomer=新的CiaccoRandom();
植物种子(种子);
randomer.getRand(最小值,最大值);//返回一个伪随机整数

PHP

代码:

namespace-ciacco\u-twister;
随机类{
私有静态$tree=0;
公共静态函数plantSeed($seed){
self::$tree=abs(intval($seed))%999999+1;
self::getRand();
}
公共静态函数getRand($min=0,$max=999999){
self::$tree=(self:$tree*125)%2796203;
返回自我::$tree%($max-$min+1)+$min;
}
}
用法:

require_once“ciacco_twister.php”;
使用ciacco_捻线器\CiaccoRandom;
$seed=123;
$min=0;
$max=255;
CiaccoRandom::植物种子($seed);
CiaccoRandom::getRand($min,$max);//返回一个伪随机整数

注意事项:

我需要一个PRNG,给定一个种子和一个整数范围,它在PHP和C#中总是返回相同的整数序列

这是相当有限的,但它服务于它的目的


也许它对其他人有用…

任何给定的平台或API都可以自由地实现自己的PRNG,当然,数字的确切顺序将取决于具体的实现选择。我不知道是否有一个标准的PHP实现。当然,.NET的实现(在您的C#代码中使用)不能保证在不同版本的.NET中是相同的。要可靠地保证不同的进程使用相同的PRNG,唯一的方法是在代码中包含您自己的实现。如果你想得到帮助,做一些研究,尝试一下,如果遇到问题,可以问一个具体的问题。一定要包括显示您尝试过的内容,以及对代码功能的精确解释,以及它与您希望它执行的功能的不同之处。@PeterDuniho the
mt
代表Mersenne Twister。Ciacco,您是否尝试过使用复制值?小提示:PHP似乎使用了与Dave Wagner的实现兼容的实现,例如@MaartenBodewes是的,我尝试过!但正如您所指出的,有不同的实现将返回不同的结果。谢谢你的帮助,我会努力实现的!