我尝试使用System.Numerics.Vector<T>
(documentation)。
我写了一个简单的单元测试:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, v.Count);
但它给了我一个构建错误:
会员&#39; Vector.Count&#39;无法使用实例引用访问;使用类型名称来限定它
令我惊讶的是,Vector<T>.Count
是静态的。
所以我试过了:
var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, Vector<double>.Count);
现在代码构建但单元测试失败:
Assert.AreEqual失败。预期:其中3。实际:&LT 2 - ;
发生了什么?
调查我发现:
Assert.AreEqual(2, Vector<double>.Count);
Assert.AreEqual(4, Vector<float>.Count);
Assert.AreEqual(4, Vector<int>.Count);
Assert.AreEqual(2, Vector<long>.Count);
答案 0 :(得分:4)
答案 1 :(得分:2)
Vector可能有些令人困惑。它是固定的预定义长度集合。它是固定的,因为它的长度总是== Vector<T>.Count
。所以如果你这样做:
var v = new Vector<double>(new double[] { 12, 13, 14 });
Console.WriteLine(v);
结果是......:
<12, 13>
它只是删除Vector<double>.Count
上的所有值,恰好是2.诀窍是Vector<T>.Count
可能因CPU架构而异。
它实际上是非常低级的原语,如描述所示:
表示指定数字类型的单个向量 适用于并行算法的低级优化。