Pow и sqrt в generic math для целых чисел

Рейтинг: 1Ответов: 1Опубликовано: 28.07.2023

У меня есть класс вершины:

public class Vertex2d<T>
    where T : INumberBase<T>, INumber<T>
{
    public Vertex2d(T x, T y)
    {
        X = x;
        Y = y;
    }

    public T X { get; }
    public T Y { get; }
}

Мне надо возвести X и Y в какую-либо степень и извлечь корень. Как это можно сделать? Есть интерфейсы IPowerFunctions<TSelf> и IRootFunctions<TSelf>, однако они не работают например для int, так что если я добавлю такие ограничение на where для дженерика, то не смогу создать вершину с типом int

Ответы

▲ 0

К сожалению нельзя сделать класс который бы работал и под целые числа, и под числа с запятой. Это объясняется вот тут, единственный выход чтобы пользоваться всеми фичами вроде извлечения корня/возведения в степень - использовать интерфейс IBinaryFloatingPointIeee754. Я изменил ограничения для дженерика следующим образом:

public class Vertex2<T> : IComparable<Vertex2<T>>, IEquatable<Vertex2<T>>
   where T: IBinaryFloatingPointIeee754<T>
{
    public Vertex2d(T x, T y)
    {
        X = x;
        Y = y;
    }

    public T X { get; }
    public T Y { get; }
}