MathUtils
using System;
namespace Newtonsoft.Json.Utilities
{
    internal static class MathUtils
    {
        public static int IntLength(ulong i)
        {
            if (i < 10000000000) {
                if (i < 10)
                    return 1;
                if (i < 100)
                    return 2;
                if (i < 1000)
                    return 3;
                if (i < 10000)
                    return 4;
                if (i < 100000)
                    return 5;
                if (i < 1000000)
                    return 6;
                if (i < 10000000)
                    return 7;
                if (i < 100000000)
                    return 8;
                if (i < 1000000000)
                    return 9;
                return 10;
            }
            if (i < 100000000000)
                return 11;
            if (i < 1000000000000)
                return 12;
            if (i < 10000000000000)
                return 13;
            if (i < 100000000000000)
                return 14;
            if (i < 1000000000000000)
                return 15;
            if (i < 10000000000000000)
                return 16;
            if (i < 100000000000000000)
                return 17;
            if (i < 1000000000000000000)
                return 18;
            if (i < 10000000000000000000)
                return 19;
            return 20;
        }
        public static char IntToHex(int n)
        {
            if (n <= 9)
                return (char)(n + 48);
            return (char)(n - 10 + 97);
        }
        public static int? Min(int? val1, int? val2)
        {
            if (!val1.HasValue)
                return val2;
            if (!val2.HasValue)
                return val1;
            return Math.Min(val1.GetValueOrDefault(), val2.GetValueOrDefault());
        }
        public static int? Max(int? val1, int? val2)
        {
            if (!val1.HasValue)
                return val2;
            if (!val2.HasValue)
                return val1;
            return Math.Max(val1.GetValueOrDefault(), val2.GetValueOrDefault());
        }
        public static double? Max(double? val1, double? val2)
        {
            if (!val1.HasValue)
                return val2;
            if (!val2.HasValue)
                return val1;
            return Math.Max(val1.GetValueOrDefault(), val2.GetValueOrDefault());
        }
        public static bool ApproxEquals(double d1, double d2)
        {
            if (d1 == d2)
                return true;
            double num = (Math.Abs(d1) + Math.Abs(d2) + 10) * 2.220446049250313E-16;
            double num2 = d1 - d2;
            if (0 - num < num2)
                return num > num2;
            return false;
        }
    }
}