System.Random()得到的随机数经测试,随机是随机了,但是不是正态分值,比如产生1 ~ 500之间的随机数,大值出现的概率很大,不能得到正态分布的随机值,有什么办法可以解决这个问题?谢谢

解决方案 »

  1.   

    // Example of the Random class constructors and Random.NextDouble( ) 
    // method.
    using System;
    using System.Threading;public class RandomObjectDemo  
    {
        // Generate random numbers from the specified Random object.
        static void RunIntNDoubleRandoms( Random randObj )
        {
            // Generate the first six random integers.
            for( int j = 0; j < 6; j++ )
                Console.Write( " {0,10} ", randObj.Next( ) );
            Console.WriteLine( );        // Generate the first six random doubles.
            for( int j = 0; j < 6; j++ )
                Console.Write( " {0:F8} ", randObj.NextDouble( ) );
            Console.WriteLine( );
        }    // Create a Random object with the specified seed.
        static void FixedSeedRandoms( int seed )
        {
            Console.WriteLine( 
                "\nRandom numbers from a Random object with " +
                "seed = {0}:", seed );
            Random fixRand = new Random( seed );        RunIntNDoubleRandoms( fixRand );
        }    // Create a random object with a timer-generated seed.
        static void AutoSeedRandoms( )
        {
            // Wait to allow the timer to advance.
            Thread.Sleep( 1 );        Console.WriteLine( 
                "\nRandom numbers from a Random object " +
                "with an auto-generated seed:" );
            Random autoRand = new Random( );        RunIntNDoubleRandoms( autoRand );
        }    static void Main( )
        {
            Console.WriteLine(
                "This example of the Random class constructors and " +
                "Random.NextDouble( ) \n" +
                "generates the following output.\n" );
            Console.WriteLine(
                "Create Random objects, and then generate and " +
                "display six integers and \nsix doubles from each.");        FixedSeedRandoms( 123 );
            FixedSeedRandoms( 123 );        FixedSeedRandoms( 456 );
            FixedSeedRandoms( 456 );        AutoSeedRandoms( );
            AutoSeedRandoms( );
            AutoSeedRandoms( );
        }
    }
      

  2.   

    不知道lz到底想要什么样的结果,系统产生的随机数都是伪随机数. 是近似的均匀分布 而不是正态分布. 如果lz想得到正态分布, 你先要想好你的正态分布的公式,才好生成.当然了,要自己生成  ...
      

  3.   

    到底是正态分布还是均匀分布?正态分布可以用大数定例自己生成,不过比较慢——用Random取30个均匀分布的随机数,然后取他们的平均。或正用第三方的:
    http://www.codeproject.com/cs/library/Random.asp?df=100&forumid=331238&exp=0&select=1925969