Don't like ads? PRO users don't see any ads ;-)
Guest

DoubleUtil

By: andrew4582 on May 9th, 2012  |  syntax: C#  |  size: 2.39 KB  |  hits: 46  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. using System.Runtime.InteropServices;
  2. using System.Windows;
  3.  
  4. namespace System {
  5.  
  6.     public static class DoubleUtil {
  7.         // Fields
  8.         public const double DBL_EPSILON = 2.2204460492503131E-16;
  9.         public const float FLT_MIN = 1.175494E-38f;
  10.  
  11.         // Methods
  12.         public static bool AreClose(double value1,double value2) {
  13.             if(value1 == value2) {
  14.                 return true;
  15.             }
  16.             double num = ((Math.Abs(value1) + Math.Abs(value2)) + 10.0) * 2.2204460492503131E-16;
  17.             double num2 = value1 - value2;
  18.             return ((-num < num2) && (num > num2));
  19.         }
  20.  
  21.         public static bool AreClose(Point point1,Point point2) {
  22.             return (AreClose(point1.X,point2.X) && AreClose(point1.Y,point2.Y));
  23.         }
  24.  
  25.         public static bool GreaterThan(double value1,double value2) {
  26.             return ((value1 > value2) && !AreClose(value1,value2));
  27.         }
  28.  
  29.         public static bool GreaterThanOrClose(double value1,double value2) {
  30.             if(value1 <= value2) {
  31.                 return AreClose(value1,value2);
  32.             }
  33.             return true;
  34.         }
  35.  
  36.         public static bool IsNaN(double value) {
  37.             NanUnion union = new NanUnion
  38.             {
  39.                 DoubleValue = value
  40.             };
  41.             ulong num = union.UintValue & 18442240474082181120L;
  42.             ulong num2 = union.UintValue & ((ulong)4503599627370495L);
  43.             if((num != 9218868437227405312L) && (num != 18442240474082181120L)) {
  44.                 return false;
  45.             }
  46.             return (num2 != 0L);
  47.         }
  48.  
  49.         public static bool IsOne(double value) {
  50.             return (Math.Abs((double)(value - 1.0)) < 2.2204460492503131E-15);
  51.         }
  52.  
  53.         public static bool LessThan(double value1,double value2) {
  54.             return ((value1 < value2) && !AreClose(value1,value2));
  55.         }
  56.  
  57.         public static bool LessThanOrClose(double value1,double value2) {
  58.             if(value1 >= value2) {
  59.                 return AreClose(value1,value2);
  60.             }
  61.             return true;
  62.         }
  63.  
  64.         // Nested Types
  65.         [StructLayout(LayoutKind.Explicit)]
  66.         private struct NanUnion {
  67.             // Fields
  68.             [FieldOffset(0)]
  69.             public double DoubleValue;
  70.             [FieldOffset(0)]
  71.             public ulong UintValue;
  72.         }
  73.     }
  74. }