11using System ;
2+ using System . Numerics ;
23using System . Runtime . CompilerServices ;
34
45namespace Platform . Numbers
@@ -49,11 +50,11 @@ public static class Math
4950 /// <para>The product of all positive integers less than or equal to the number specified as an argument.</para>
5051 /// <para>Произведение всех положительных чисел меньше или равных указанному, в качестве аргумента, числу.</para>
5152 /// </returns>
52- public static ulong Factorial ( ulong n )
53+ public static TLinkAddress Factorial < TLinkAddress > ( TLinkAddress n ) where TLinkAddress : IUnsignedNumber < TLinkAddress > , IComparisonOperators < TLinkAddress , TLinkAddress , bool >
5354 {
54- if ( n >= 0 && n <= MaximumFactorialNumber )
55+ if ( n >= TLinkAddress . Zero && n <= TLinkAddress . CreateTruncating ( MaximumCatalanIndex ) )
5556 {
56- return _factorials [ n ] ;
57+ return TLinkAddress . CreateTruncating ( _factorials [ ulong . CreateTruncating ( n ) ] ) ;
5758 }
5859 else
5960 {
@@ -73,11 +74,11 @@ public static ulong Factorial(ulong n)
7374 /// <para>The Catalan Number with the number specified as an argument.</para>
7475 /// <para>Число Катанала с номером, указанным в качестве аргумента.</para>
7576 /// </returns>
76- public static ulong Catalan ( ulong n )
77+ public static TLinkAddress Catalan < TLinkAddress > ( TLinkAddress n ) where TLinkAddress : IUnsignedNumber < TLinkAddress > , IComparisonOperators < TLinkAddress , TLinkAddress , bool >
7778 {
78- if ( n >= 0 && n <= MaximumCatalanIndex )
79+ if ( n >= TLinkAddress . Zero && n <= TLinkAddress . CreateTruncating ( MaximumCatalanIndex ) )
7980 {
80- return _catalans [ n ] ;
81+ return TLinkAddress . CreateTruncating ( _catalans [ ulong . CreateTruncating ( n ) ] ) ;
8182 }
8283 else
8384 {
@@ -98,6 +99,9 @@ public static ulong Catalan(ulong n)
9899 /// <para>True, если число является степенью двойки, иначе - false.</para>
99100 /// </returns>
100101 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
101- public static bool IsPowerOfTwo ( ulong x ) => ( x & x - 1 ) == 0 ;
102+ public static bool IsPowerOfTwo < TLinkAddress > ( TLinkAddress x ) where TLinkAddress : IUnsignedNumber < TLinkAddress > , IBitwiseOperators < TLinkAddress , TLinkAddress , TLinkAddress > , IComparisonOperators < TLinkAddress , TLinkAddress , bool >
103+ {
104+ return ( x & x - TLinkAddress . One ) == TLinkAddress . Zero ;
105+ }
102106 }
103107}
0 commit comments