λλ λΉμ μ΄ νλ ¬μ λν΄ μ¬μ©μ μ μ ν΄λμ€λ₯Ό μ¬μ©ν μ μλ€λ κ²μ μκ³ μμ§λ§ κ·Έκ²μ ν΅κ³Όν μλ μμ΅λλ€. λ΄ floatλ₯Ό ꡬννκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
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);
κ·Έλ¦¬κ³ λ λ©μΆ₯λλ€. λκ° λΉ μ§ κ² κ°μλ° λ¬Έμλ μνμμ μ°Ύμ μ μλλ° μ΄λ»κ² μλνκ² ν©λκΉ?
λ΅μ₯μ λ¦κ² 보λ΄μ λ―Έμν΄. λ΄ μ½λμ λ¬Έμ κ° μλ κ² κ°μ΅λλ€. μ€μ λ‘λ Matrix μ½λκ° μλλΌ Constant<T>
ν΄λμ€μ μ‘μΈμ€ν λ νμ¬ μ€νλλ ComputePi
λ©μλμ μμ΅λλ€. μ΄κ²μ μ¬μ΄ μμ μ΄ λ κ²μ΄λ©° λ΄μΌμ―€ μμ μ μ€λΉν μ μμ κ²μ
λλ€. :)
λ΄κ° ν΄μΌ ν μΌμ 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://github.com/ZacharyPatten/Towel/blob/a20b32e75b8c3fc903124a70d0fc543ecbe830bd/Sources/Towel/Constant.cs#L64
μ΄ κ²μλ¬Ό νμ¬ nuget ν¨ν€μ§λ₯Ό μ λ°μ΄νΈνμ§ μμμ§λ§ κ°κΉμ΄ μμΌ λ΄μ μ λ°μ΄νΈν κ²μ λλ€.
μ§κΈ μλνλλ‘ ν μ μλ ν«ν½μ€κ° μμ΅λκΉ? λ€λ₯Έ λ°©λ²μ΄λ μ°μ°μλ₯Ό μΆκ°ν΄μΌ ν κΉμ?
μ΄ λ¬Έμ λ PR #54μμ μμ λμλ€κ³ μκ°ν©λλ€. μ¬μ ν λ¬Έμ λλ μΆκ° λ¬Έμ κ° μλ κ²½μ° μ΄ λ¬Έμ λ₯Ό λ€μ μ΄κ±°λ μ λ¬Έμ λ₯Ό μ¬μμμ€.
κ°μ₯ μ μ©ν λκΈ
λ΅μ₯μ λ¦κ² 보λ΄μ λ―Έμν΄. λ΄ μ½λμ λ¬Έμ κ° μλ κ² κ°μ΅λλ€. μ€μ λ‘λ Matrix μ½λκ° μλλΌ
Constant<T>
ν΄λμ€μ μ‘μΈμ€ν λ νμ¬ μ€νλλComputePi
λ©μλμ μμ΅λλ€. μ΄κ²μ μ¬μ΄ μμ μ΄ λ κ²μ΄λ©° λ΄μΌμ―€ μμ μ μ€λΉν μ μμ κ²μ λλ€. :)λ΄κ° ν΄μΌ ν μΌμ
ComputePi
λ©μλμμ λ°μνλ 무ν 루νλ₯Ό μμ νκ±°λ λͺ¨λ μμκ°Constant<T>
ν΄λμ€μμ κ³μ°λλ κ²μ λ°©μ§ν΄μΌ ν©λλ€.Constant<T>.Zero
μ‘μΈμ€νκ³ μμ§λ§ ν΄λΉ ν΄λμ€μ λͺ¨λ ꡬμ±μμ΄ μ μ νλμ΄λ―λ‘ νμ¬Constant<T>.Pi
λ κ³μ°ν©λλ€. μλλ μ±λ₯μμ μ΄μ λ‘ μ΄ μμ μ μννμ΅λλ€.λ¬Έμ λ₯Ό μ μΆν΄ μ£Όμ μ κ°μ¬ν©λλ€. μ΄ λ¬Έμ κ° ν΄κ²°λλ©΄ λ€μ κ²μνκ² μ΅λλ€. :)