Spelling
This commit is contained in:
		
							parent
							
								
									a8121a306e
								
							
						
					
					
						commit
						817895015f
					
				@ -36,13 +36,12 @@ public sealed class MultiChannelRng<TNum> : IRandom<TNum>, IDisposable where TNu
 | 
			
		||||
    #region Constructors
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Creates a multi-threaded random number generator.
 | 
			
		||||
    /// Creates a multithreaded random number generator.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <remarks>
 | 
			
		||||
    /// This constructor uses the user's current local time
 | 
			
		||||
    /// to derive necessary parameters for the generator.
 | 
			
		||||
    /// Thus, the results are depending on the time, where
 | 
			
		||||
    /// the generator was created.
 | 
			
		||||
    /// to derive the necessary parameters for the generator.
 | 
			
		||||
    /// Thus, the results depend on the time when the generator was created.
 | 
			
		||||
    /// </remarks>
 | 
			
		||||
    public MultiChannelRng()
 | 
			
		||||
    {
 | 
			
		||||
@ -58,7 +57,7 @@ public sealed class MultiChannelRng<TNum> : IRandom<TNum>, IDisposable where TNu
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Creates a multi-threaded random number generator.
 | 
			
		||||
    /// Creates a multithreaded random number generator.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <remarks>
 | 
			
		||||
    /// A multi-threaded random number generator created by this constructor is
 | 
			
		||||
 | 
			
		||||
@ -12,18 +12,15 @@ namespace FastRng;
 | 
			
		||||
/// </summary>
 | 
			
		||||
/// <remarks>
 | 
			
		||||
/// Please note, that Math.NET's (https://www.mathdotnet.com/) random number generator is in some situations faster.
 | 
			
		||||
/// Unlike Math.NET, MultiThreadedRng is multi-threaded. Consumers can use a token to cancel e.g. timeout an operation.<br/><br/>
 | 
			
		||||
/// Unlike Math.NET, MultiThreadedRng is multithreaded. Consumers can use a token to cancel an operation.<br/><br/>
 | 
			
		||||
///
 | 
			
		||||
/// MultiThreadedRng using a shape fitter (a rejection sampler) to enforce arbitrary shapes of probabilities for
 | 
			
		||||
/// desired distributions. By using the shape fitter, it is even easy to define discontinuous, arbitrary functions
 | 
			
		||||
/// desired distributions. By using the shape fitter, it is even easier to define discontinuous, arbitrary functions
 | 
			
		||||
/// as shapes. Any consumer can define and use own distributions.<br/><br/>
 | 
			
		||||
/// 
 | 
			
		||||
/// This class uses the George Marsaglia's MWC algorithm. The algorithm's implementation based loosely on John D.
 | 
			
		||||
/// This class uses the George Marsaglia's MWC algorithm. The algorithm's implementation is based loosely on John D.
 | 
			
		||||
/// Cook's (johndcook.com) implementation (https://www.codeproject.com/Articles/25172/Simple-Random-Number-Generation).
 | 
			
		||||
/// Thanks John for the inspiration.<br/><br/>
 | 
			
		||||
///
 | 
			
		||||
/// Please notice: When using the debug environment, MultiThreadedRng might uses a smaller buffer size. Please ensure,
 | 
			
		||||
/// that the production environment uses a release build, though.
 | 
			
		||||
/// Thanks, John, for the inspiration.<br/><br/>
 | 
			
		||||
/// </remarks>
 | 
			
		||||
public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TNum : IFloatingPointIeee754<TNum>, IAdditionOperators<TNum, TNum, TNum>
 | 
			
		||||
{
 | 
			
		||||
@ -33,10 +30,10 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
    private const int BUFFER_SIZE = 1_000_000;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // The queue size means, how many buffer we store in a queue at the same time:
 | 
			
		||||
    // The queue size means, how many buffers we store in a queue at the same time:
 | 
			
		||||
    private const int QUEUE_SIZE_FLOAT = 2;
 | 
			
		||||
    
 | 
			
		||||
    // The queue size means, how many buffer we store in a queue at the same time:
 | 
			
		||||
    // The queue size means, how many buffers we store in a queue at the same time:
 | 
			
		||||
    private const int QUEUE_SIZE_INT = QUEUE_SIZE_FLOAT * 2;
 | 
			
		||||
 | 
			
		||||
    private static readonly TNum CONST_FLOAT_CONVERSION = TNum.CreateChecked(2.328306435454494e-10f);
 | 
			
		||||
@ -65,7 +62,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
    private uint mW;
 | 
			
		||||
    private uint mZ;
 | 
			
		||||
        
 | 
			
		||||
    // This is the current buffer for the consumer side i.e. the public interfaces:
 | 
			
		||||
    // This is the current buffer for the consumer side, i.e., the public interfaces:
 | 
			
		||||
    private TNum[] currentBuffer = [];
 | 
			
		||||
        
 | 
			
		||||
    // The current pointer to the next current buffer's address to read from:
 | 
			
		||||
@ -77,10 +74,8 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
    /// Creates a multi-threaded random number generator.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <remarks>
 | 
			
		||||
    /// This constructor uses the user's current local time
 | 
			
		||||
    /// to derive necessary parameters for the generator.
 | 
			
		||||
    /// Thus, the results are depending on the time, where
 | 
			
		||||
    /// the generator was created.
 | 
			
		||||
    /// This constructor uses the user's current local time to derive the necessary parameters for the generator.
 | 
			
		||||
    /// Thus, the results depend on the time when the generator was created.
 | 
			
		||||
    /// </remarks>
 | 
			
		||||
    public MultiThreadedRng()
 | 
			
		||||
    {
 | 
			
		||||
@ -171,7 +166,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
                {
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        // Ensure, that we do not produce more buffers, as configured: 
 | 
			
		||||
                        // Ensure that we do not produce more buffers, as configured: 
 | 
			
		||||
                        if (this.queueIntegers.Count < QUEUE_SIZE_INT)
 | 
			
		||||
                        {
 | 
			
		||||
                            this.queueIntegers.Enqueue(nextBuffer);
 | 
			
		||||
@ -224,7 +219,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
                {
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        // Ensure, that the queue contains only the configured number of buffers:
 | 
			
		||||
                        // Ensure that the queue contains only the configured number of buffers:
 | 
			
		||||
                        if (this.queueFloats.Count < QUEUE_SIZE_FLOAT)
 | 
			
		||||
                        {
 | 
			
		||||
                            this.queueFloats.Enqueue(nextBuffer);
 | 
			
		||||
@ -273,7 +268,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
            // can get the next buffer:
 | 
			
		||||
            lock (LOCKER)
 | 
			
		||||
            {
 | 
			
		||||
                // We are might not the first thread, which has to get the next buffer.
 | 
			
		||||
                // We might not the first thread, which has to get the next buffer.
 | 
			
		||||
                // When some other thread has already got the next buffer, the pointer
 | 
			
		||||
                // was already reset to zero. In this case, we start over again:
 | 
			
		||||
                if(this.currentBufferPointer < BUFFER_SIZE)
 | 
			
		||||
@ -295,7 +290,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
 | 
			
		||||
        // Made a local copy of the current pointer:
 | 
			
		||||
        var myPointer = this.currentBufferPointer;
 | 
			
		||||
        
 | 
			
		||||
        // Issue #8: This might happens when the current thread was interrupted by another thread, and
 | 
			
		||||
        // Issue #8: This might happen when another thread interrupted the current thread, and
 | 
			
		||||
        // the other thread has already updated the pointer. In this case, we start over again.
 | 
			
		||||
        if (myPointer >= BUFFER_SIZE)
 | 
			
		||||
            goto Start;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user