26 lines
880 B
C#
26 lines
880 B
C#
using System;
|
|
|
|
namespace FastRng;
|
|
|
|
/// <summary>
|
|
/// Provides some mathematical function, which are not available within in .NET itself.
|
|
/// </summary>
|
|
public static class MathToolsInteger
|
|
{
|
|
/// <summary>
|
|
/// The mathematical factorial function for integer numbers.
|
|
/// </summary>
|
|
/// <param name="x">The value, for which you want to know the factorial.</param>
|
|
/// <exception cref="ArgumentOutOfRangeException">Throws, when x is greater than 20. Due to limitations of 64bit ulong type.</exception>
|
|
public static ulong Factorial(uint x)
|
|
{
|
|
if (x > 20)
|
|
throw new ArgumentOutOfRangeException(nameof(x), $"Cannot compute {x}!, since ulong.max is 18_446_744_073_709_551_615.");
|
|
|
|
ulong accumulator = 1;
|
|
for (uint factor = 1; factor <= x; factor++)
|
|
accumulator *= factor;
|
|
|
|
return accumulator;
|
|
}
|
|
} |