OSDN Git Service

faster2
[psychlops/silverlight.git] / dev4 / psychlops / core / math / util.cs
index 7f498d3..85134a9 100644 (file)
@@ -5,13 +5,38 @@ namespace Psychlops
 \r
        public static class Math\r
        {\r
-               public static readonly double PI = 3.14159265, E = 2.718281828459045;\r
+               public static readonly double PI = 3.14159265, E = 2.718281828459045, LOG2E = 1.44269504088896340736;\r
                public static Random random_generator;\r
                static Math()\r
                {\r
                        random_generator = new Random();\r
                }\r
 \r
+               public static double max(double val1, double val2)\r
+               {\r
+                       return val1 > val2 ? val1 : val2;\r
+               }\r
+               public static double min(double val1, double val2)\r
+               {\r
+                       return val1 < val2 ? val1 : val2;\r
+               }\r
+               public static void shuffle<X>(X[] array, int n)\r
+               {\r
+                       int a;\r
+                       X tmp;\r
+                       for(int i = 1; i < n; i++){\r
+                               a = random(i + 1);\r
+                               tmp = array[i];\r
+                               array[i] = array[a];\r
+                               array[a] = tmp;\r
+                       }\r
+               }\r
+\r
+\r
+               public static double mod(double lhs, double rhs)\r
+               {\r
+                       return lhs - System.Math.Floor(lhs/rhs)*rhs;\r
+               }\r
                public static double abs(double x)\r
                {\r
                        return System.Math.Abs(x);\r
@@ -40,6 +65,16 @@ namespace Psychlops
                {\r
                        return System.Math.Log(x);\r
                }\r
+               public static double log2(double val)\r
+               {\r
+                       return log(val) * LOG2E;\r
+               }\r
+               /*public static int round(double val)\r
+               {\r
+                       double integer_part, particle = modf(val, &integer_part);\r
+                       return ((particle < 0.5 | (particle == 0.5 && (int)integer_part % 2 == 0)) ? (int)integer_part : (int)integer_part + 1);\r
+               }*/\r
+\r
                public static double radius(double x, double y)\r
                {\r
                        return System.Math.Sqrt(x * x + y * y);\r
@@ -49,6 +84,10 @@ namespace Psychlops
                {\r
                        return (random_generator.NextDouble());\r
                }\r
+               public static int random(int x)\r
+               {\r
+                       return (int)((random_generator.NextDouble()) * x);\r
+               }\r
                public static double random(double x)\r
                {\r
                        return (random_generator.NextDouble()) * x;\r