我知道您可以对矩阵使用用户定义的类,但我无法通过它。 假设我想实现我的浮动:
public class MyFloat
{
private float value;
public MyFloat(float value)
{
this.value = value;
}
public static MyFloat operator *(MyFloat a, MyFloat b) => new MyFloat(a.value * b.value);
public static MyFloat operator +(MyFloat a, MyFloat b) => new MyFloat(a.value + b.value);
public static MyFloat operator /(MyFloat a, MyFloat b) => new MyFloat(a.value / b.value);
public static MyFloat operator -(MyFloat a, MyFloat b) => new MyFloat(a.value - b.value);
public static MyFloat Zero => new MyFloat(0);
public static implicit operator MyFloat(float a) => new MyFloat(a);
public static implicit operator float(MyFloat a) => a.value;
public static implicit operator MyFloat(int a) => new MyFloat(a); // this one is needed for Constant<T>.Zero
}
然后我创建两个矩阵并尝试将它们相乘
var a = new Matrix<MyFloat>(3, 5);
for (int i = 0; i < a.Rows; i++)
for (int j = 0; j < a.Columns; j++)
a[i, j] = 3;
var b = new Matrix<MyFloat>(5, 6);
for (int i = 0; i < b.Rows; i++)
for (int j = 0; j < b.Columns; j++)
b[i, j] = 5;
var c = a * b;
Console.WriteLine(c);
然后它挂了。 我想我遗漏了一些东西,但在文档或示例中找不到它,但我该如何使它工作?
回复晚了非常抱歉。 我的代码中似乎存在问题。 它实际上不在矩阵代码中,它在我的ComputePi
方法中,该方法当前在我访问Constant<T>
类时运行。 这可能是一个简单的修复,我可能会在明天之前准备好修复。 :)
我需要做的是修复ComputePi
方法中发生的无限循环,或者我需要防止在Constant<T>
类中计算所有常量。 即使我正在访问Constant<T>.Zero
,它目前也计算Constant<T>.Pi
因为该类的所有成员都是静态字段。 我最初是出于性能原因这样做的。
感谢您提交问题。 修复后我会再次发布此问题。 :)
我已经解决了这个问题,尽管我目前需要更多的操作员,而不仅仅是您在样本中拥有的操作员。 Towel
项目的所有测试方法都在Tools/Towel_Testing
项目中。 我在这里为您的样本添加了一个测试方法:
https://github.com/ZacharyPatten/Towel/blob/a20b32e75b8c3fc903124a70d0fc543ecbe830bd/Tools/Towel_Testing/Mathematics/Matrix.cs#L1737
您可以看到我添加了以下运算符:
public static bool operator <=(MyFloat a, MyFloat b) => a.value <= b.value;
public static bool operator >=(MyFloat a, MyFloat b) => a.value >= b.value;
public static bool operator ==(MyFloat a, MyFloat b) => a.value == b.value;
public static bool operator !=(MyFloat a, MyFloat b) => a.value != b.value;
public static MyFloat operator -(MyFloat a) => new MyFloat(-a.value);
至于ComputePi
方法......我忘记了++
一个变量......所以感谢你抓住它。 仍有改进的余地,但这至少解决了您的问题。 :) 这是我忘记了++
的行: https :
在这篇文章中,我还没有更新 nuget 包,但我会在不久的将来更新。
是否有修补程序,以便我现在可以使其工作? 也许我应该添加另一种方法或运算符?
我相信这个问题已在 PR #54 中解决。 如果仍有问题或更多问题,请重新打开此问题或打开一个新问题。
最有用的评论
回复晚了非常抱歉。 我的代码中似乎存在问题。 它实际上不在矩阵代码中,它在我的
ComputePi
方法中,该方法当前在我访问Constant<T>
类时运行。 这可能是一个简单的修复,我可能会在明天之前准备好修复。 :)我需要做的是修复
ComputePi
方法中发生的无限循环,或者我需要防止在Constant<T>
类中计算所有常量。 即使我正在访问Constant<T>.Zero
,它目前也计算Constant<T>.Pi
因为该类的所有成员都是静态字段。 我最初是出于性能原因这样做的。感谢您提交问题。 修复后我会再次发布此问题。 :)