重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5125|回复: 0
打印 上一主题 下一主题

c# 产生真正随机数

[复制链接]

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
跳转到指定楼层
楼主
发表于 2018-7-6 16:12:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 李维强-15级 于 2018-7-6 16:21 编辑

如果用random类,来产生少量的随机数 也是可取的,而且必须是在非连续的时间段,意思就是不能用在for循环等连续产生随机数的地方。

下面这个示例 就是错误的示例
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
            
            int value1 = 0;
            Random rd1 = new Random();
            for (int i = 0; i < 1000; i++)
            {
                
                value1 = value1 +   rd1.Next(-10, 10);
            }

这样,最后value1的值总是负数,而且循环次数越多,负得越大。

针对这种情况,微软专门给了个产生真随机数的函数
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
        public int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);

        }


这个函数就是产生真随机数的,结果是有正有负,好像是9位数的随机数,那么如果需要转换为-100到100之间的输,那么直接GetRandomSeed() % 100 即可
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 00:24 , Processed in 0.175366 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表