Files
SjkScripts/Math/Math.cs

60 lines
1.4 KiB
C#
Raw Normal View History

2026-04-04 13:18:04 -04:00
using System.Numerics;
namespace SJK.Math;
public static class SJKMath
{
2026-04-13 23:22:55 -04:00
/// <summary>
/// Gets the max number in a array of values.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="values"></param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
2026-04-04 13:18:04 -04:00
public static T Max<T>(params T[] values) where T : INumber<T>
{
if (values.Length == 0)
throw new ArgumentException($"No values provided");
T max = values[0];
foreach (var item in values.Skip(1))
{
max = T.Max(item, max);
}
return max;
}
public static T Min<T>(params T[] values) where T : INumber<T>
{
if (values.Length == 0)
throw new ArgumentException($"No values provided");
T max = values[0];
foreach (var item in values.Skip(1))
{
max = T.Min(item, max);
}
return max;
}
public static long UpperPowerOfTwo(long v)
{
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
return v;
}
public static int UpperPowerOfTwo(int v)
{
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
return v;
}
}