Developer knowledge network · moderated exchange

UnreliableCode қауымдастығы

Әзірлеушілерді зерттеу, кері инженерия және кодтау қауымдастығы

Knowledge indexТірі
4Categories
919Threads
2.8KЖазбалар
Discussion

C# 11 Generic Math (INumber<T>): Writing Universal Numeric Algorithms with Static Abstract Interface Members [StackOverflow Architecture Guide]

generic_math_geek
C# 11 Math Guru
MEMBER
Өкіл: 138
Қосылу күні: Jul 2021
Хабарламалар: 10
Рахмет: 88
1 ай бұрын · Jul 15, 2026 4:35 AM
#1

How C# 11 static abstract members in interfaces enable universal numeric algorithms:

CSHARP
public static T SumArray<T>(ReadOnlySpan<T> numbers) where T : INumber<T>
{
    T total = T.Zero;
    foreach (T n in numbers)
        total += n;
    return total;
}

// Works on int, float, double, decimal, Half, BigInteger, and custom types!
int sumInt = SumArray<int>([1, 2, 3, 4]);
double sumDouble = SumArray<double>([1.5, 2.5, 3.5]);

The JIT compiler monomorphizes generic math calls into native CPU assembly with zero boxing and zero interface dispatch overhead!

dotnet_runtime_architect
.NET Core Specialist
MEMBER
Өкіл: 103
Қосылу күні: Apr 2018
Хабарламалар: 40
Рахмет: 24
1 ай бұрын · Jul 15, 2026 7:18 AM
#2

Static abstract interface members (INumber<T>, IFloatingPoint<T>) solved a 20-year limitation in C# where generic operators like + and * were impossible.

simd_vector_ace
SIMD & Intrinsics
MEMBER
Өкіл: 151
Қосылу күні: May 2020
Хабарламалар: 8
Рахмет: 36
1 ай бұрын · Jul 15, 2026 9:03 PM
#3

Clean, type-safe, and generates identical machine code to hand-written scalar arithmetic.