--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace Karinto\r
+{\r
+ [StructLayout(LayoutKind.Explicit)]\r
+ public struct Complex : IEquatable<Complex>, IFormattable\r
+ {\r
+ [FieldOffset(0)]\r
+ private double real;\r
+ [FieldOffset(8)] \r
+ private double imaginary;\r
+\r
+ public Complex(double real, double imaginary)\r
+ {\r
+ this.real = real;\r
+ this.imaginary = imaginary;\r
+ }\r
+\r
+ public double Real\r
+ {\r
+ get{\r
+ return real;\r
+ }\r
+ }\r
+\r
+ public double Imaginary\r
+ {\r
+ get\r
+ {\r
+ return imaginary;\r
+ }\r
+ }\r
+\r
+ public override string ToString()\r
+ {\r
+ return "(" + real.ToString() + ", " + imaginary.ToString() + ")";\r
+ }\r
+\r
+ public string ToString(IFormatProvider provider)\r
+ {\r
+ return ToString();\r
+ }\r
+\r
+ public string ToString(string format)\r
+ {\r
+ return ToString();\r
+ }\r
+\r
+ public string ToString(string format, IFormatProvider provider)\r
+ {\r
+ return ToString();\r
+ }\r
+\r
+ bool IEquatable<Complex>.Equals(Complex value)\r
+ {\r
+ return real.Equals(value.real) && imaginary.Equals(value.imaginary);\r
+ }\r
+\r
+\r
+ }\r
+}\r