Для чего используется System.Numerics.Vector.ConditionalSelect?

Может кто-нибудь объяснить, желательно с примером, что / когда / как System.Numerics.Vector.ConditionalSelect может быть использован?

Я не могу понять многое из документов.

1 ответ

Решение

condition параметр на самом деле Vector<int> при использовании 4-х байтовых перегрузок ConditionalSelect такие как те, с Vector<int> или же Vector<float> аргументы. condition является Vector<long> при использовании 8-байтовых версий и т. д.

Чтобы расширить комментарий @Hans в вашем вопросе, condition означает что-то вроде: double c = cond == -1 ? a : b;, То есть когда cond == -1, он выбирает левые значения. когда cond == 0, он выбирает правильные значения.

когда cond это что-то еще, я видел некоторые результаты, которые я пока не особенно понимаю, и на самом деле не исследовал.

class Program
{
    static void Main(string[] args)
    {
        //Length depends on your Vector<int>.Count. In my computer it is 4
        Vector<int> vector1 = new Vector<int>(4); //vector1 == {<4, 4, 4, 4>}
        Vector<int> vector2 = new Vector<int>(5); //vector2 == {<5, 5, 5, 5>}
        Vector<int> mask = Vector.GreaterThan(vector1, vector2); //mask == {<0, 0, 0, 0>}
        Vector<int> selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<5, 5, 5, 5>}

        vector1 = new Vector<int>(4); //vector1 == {<4, 4, 4, 4>}
        vector2 = new Vector<int>(3); //vector2 == {<3, 3, 3, 3>}
        mask = Vector.GreaterThan(vector1, vector2); //mask == {<-1, -1, -1, -1>}
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<4, 4, 4, 4>}

        mask = new Vector<int>(123); //mask == {<123, 123, 123, 123>}
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<0, 0, 0, 0>}

        mask = new Vector<int>(4);
        selected = Vector.ConditionalSelect(mask, vector1, vector2); //selected == {<7, 7, 7, 7>}
    }
}
Другие вопросы по тегам