-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExtensionMethods.cs
106 lines (92 loc) · 2.31 KB
/
ExtensionMethods.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Linq;
using System.Text;
using System.Numerics;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace ExtendedArithmetic
{
public static class ComplexExtensionMethods
{
public static Complex Clone(this Complex source)
{
return new Complex(source.Real, source.Imaginary);
}
public static Complex Norm(this Complex source)
{
return Complex.Multiply(source, Complex.Conjugate(source));
}
public static int Sign(this Complex source)
{
return (source.Real == 0) ? Math.Sign(source.Imaginary) : Math.Sign(source.Real);
}
public static Complex Mod(this Complex source, Complex other)
{
Complex negQuot = Complex.Negate(Complex.Divide(source, other));
Complex ceil = new Complex(Math.Round(negQuot.Real), Math.Round(negQuot.Imaginary));
return Complex.Add(source, Complex.Multiply(other, ceil));
}
public static Complex NthRoot(this Complex value, int root)
{
double one = 1.0;
double rt = (double)root;
double fraction = (one / rt);
return Complex.Pow(value, fraction);
}
public static string FormatString(this Complex source)
{
string im = "";
string sign = "";
double real = source.Real;
double imaginary = source.Imaginary;
bool hasComplexPart = false;
if (real < Math.Pow(10d, -5d))
{
real = Math.Round(real, 5);
}
if (imaginary < Math.Pow(10d, -5d))
{
imaginary = Math.Round(imaginary, 5);
}
if (Math.Sign(imaginary) == 1)
{
sign = " + ";
im = $"{imaginary}{I}";
hasComplexPart = true;
}
else if (Math.Sign(imaginary) == -1)
{
sign = " - ";
im = $"{Math.Abs(imaginary)}{I}";
hasComplexPart = true;
}
string result = $"{real}{sign}{im}";
if (hasComplexPart)
{
result = $"({result})";
}
return result;
}
private static string I;
private static string[] iChars;
static ComplexExtensionMethods()
{
iChars = new string[] { "𝒊", "𝐢", "𝑖", "𝘪", "𝕚", "i" };
I = iChars[1];
}
}
public static class IDictionaryExtensionMethods
{
public static void RemoveRange<TKey, TValue>(this IDictionary<TKey, TValue> source, IEnumerable<TKey> collection)
{
if (collection.Any())
{
int index = collection.Count();
while (index-- > 0)
{
source.Remove(collection.ElementAt(index));
}
}
}
}
}