1
1
using System ;
2
+ using System . Numerics ;
2
3
using System . Runtime . CompilerServices ;
3
4
4
5
namespace Platform . Numbers
@@ -49,11 +50,11 @@ public static class Math
49
50
/// <para>The product of all positive integers less than or equal to the number specified as an argument.</para>
50
51
/// <para>Произведение всех положительных чисел меньше или равных указанному, в качестве аргумента, числу.</para>
51
52
/// </returns>
52
- public static ulong Factorial ( ulong n )
53
+ public static TLinkAddress Factorial < TLinkAddress > ( TLinkAddress n ) where TLinkAddress : IUnsignedNumber < TLinkAddress > , IComparisonOperators < TLinkAddress , TLinkAddress , bool >
53
54
{
54
- if ( n >= 0 && n <= MaximumFactorialNumber )
55
+ if ( n >= TLinkAddress . Zero && n <= TLinkAddress . CreateTruncating ( MaximumCatalanIndex ) )
55
56
{
56
- return _factorials [ n ] ;
57
+ return TLinkAddress . CreateTruncating ( _factorials [ ulong . CreateTruncating ( n ) ] ) ;
57
58
}
58
59
else
59
60
{
@@ -73,11 +74,11 @@ public static ulong Factorial(ulong n)
73
74
/// <para>The Catalan Number with the number specified as an argument.</para>
74
75
/// <para>Число Катанала с номером, указанным в качестве аргумента.</para>
75
76
/// </returns>
76
- public static ulong Catalan ( ulong n )
77
+ public static TLinkAddress Catalan < TLinkAddress > ( TLinkAddress n ) where TLinkAddress : IUnsignedNumber < TLinkAddress > , IComparisonOperators < TLinkAddress , TLinkAddress , bool >
77
78
{
78
- if ( n >= 0 && n <= MaximumCatalanIndex )
79
+ if ( n >= TLinkAddress . Zero && n <= TLinkAddress . CreateTruncating ( MaximumCatalanIndex ) )
79
80
{
80
- return _catalans [ n ] ;
81
+ return TLinkAddress . CreateTruncating ( _catalans [ ulong . CreateTruncating ( n ) ] ) ;
81
82
}
82
83
else
83
84
{
@@ -98,6 +99,9 @@ public static ulong Catalan(ulong n)
98
99
/// <para>True, если число является степенью двойки, иначе - false.</para>
99
100
/// </returns>
100
101
[ 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
+ }
102
106
}
103
107
}
0 commit comments