Towel: рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдПрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреБрд▓ре░ 2020  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ZacharyPatten/Towel

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдлреНрд▓реЛрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

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 рдЧрдгрдирд╛ рднреА рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рд╕рджрд╕реНрдп рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛ред

рдореБрджреНрджрд╛ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж. рдЬрдм рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред :)

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджреЗрд░реА рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдлреАред рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореЗрд░реА 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://github.com/ZacharyPatten/Towel/blob/a20b32e75b8c3fc903124a70d0fc543ecbe830bd/Sources/Towel/Constant.cs#L64

рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдХреЛрдИ рд╣реЙрдЯрдлрд┐рдХреНрд╕ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХрд╛рдо рдХрд░ рд╕рдХреВрдВ? рд╢рд╛рдпрдж рдореБрдЭреЗ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╛ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдкреАрдЖрд░ #54 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдЕрднреА рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдпрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ рдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕