Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Runtime.InteropServices;
- using System.Windows;
- namespace System {
- public static class DoubleUtil {
- // Fields
- public const double DBL_EPSILON = 2.2204460492503131E-16;
- public const float FLT_MIN = 1.175494E-38f;
- // Methods
- public static bool AreClose(double value1,double value2) {
- if(value1 == value2) {
- return true;
- }
- double num = ((Math.Abs(value1) + Math.Abs(value2)) + 10.0) * 2.2204460492503131E-16;
- double num2 = value1 - value2;
- return ((-num < num2) && (num > num2));
- }
- public static bool AreClose(Point point1,Point point2) {
- return (AreClose(point1.X,point2.X) && AreClose(point1.Y,point2.Y));
- }
- public static bool GreaterThan(double value1,double value2) {
- return ((value1 > value2) && !AreClose(value1,value2));
- }
- public static bool GreaterThanOrClose(double value1,double value2) {
- if(value1 <= value2) {
- return AreClose(value1,value2);
- }
- return true;
- }
- public static bool IsNaN(double value) {
- NanUnion union = new NanUnion
- {
- DoubleValue = value
- };
- ulong num = union.UintValue & 18442240474082181120L;
- ulong num2 = union.UintValue & ((ulong)4503599627370495L);
- if((num != 9218868437227405312L) && (num != 18442240474082181120L)) {
- return false;
- }
- return (num2 != 0L);
- }
- public static bool IsOne(double value) {
- return (Math.Abs((double)(value - 1.0)) < 2.2204460492503131E-15);
- }
- public static bool LessThan(double value1,double value2) {
- return ((value1 < value2) && !AreClose(value1,value2));
- }
- public static bool LessThanOrClose(double value1,double value2) {
- if(value1 >= value2) {
- return AreClose(value1,value2);
- }
- return true;
- }
- // Nested Types
- [StructLayout(LayoutKind.Explicit)]
- private struct NanUnion {
- // Fields
- [FieldOffset(0)]
- public double DoubleValue;
- [FieldOffset(0)]
- public ulong UintValue;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment