CalcValue() public method

public CalcValue ( ) : double
return double
コード例 #1
0
 /// <summary>
 /// Returns a random double from the full range of possible double values.
 /// The sign, mantissa and the exponent are independent random numbers, 
 /// thus the distribution of numbers is not uniform.
 /// </summary>
 /// <returns></returns>
 public double NextDoubleFullRange()
 {
     long mantissa = NextLong(52);
     int exponent = _random.Next(-1023-52, 1024-52);
     int sign = NextBool() ? -1 : +1; // Gets us -1 or +1.
     double result = sign * (double)mantissa * (double)Math.Pow(2.0, exponent);
     var dc = new DoubleComponents(result);
     Debug.Assert(result == dc.CalcValue());
     return result;
 }
コード例 #2
0
        /// <summary>
        /// Returns a random double from the full range of possible double values.
        /// The sign, mantissa and the exponent are independent random numbers,
        /// thus the distribution of numbers is not uniform.
        /// </summary>
        /// <returns></returns>
        public double NextDoubleFullRange()
        {
            long   mantissa = NextLong(52);
            int    exponent = _random.Next(-1023 - 52, 1024 - 52);
            int    sign     = NextBool() ? -1 : +1; // Gets us -1 or +1.
            double result   = sign * (double)mantissa * (double)Math.Pow(2.0, exponent);
            var    dc       = new DoubleComponents(result);

            Debug.Assert(result == dc.CalcValue());
            return(result);
        }
コード例 #3
0
        // Returns a double in the range where we expect the robust arithmetic to be valid 
        // - exponents between -142 and 201. (According to S. p.3)
        public double NextDoubleValidRange()
        {
            double result = double.NaN;

            while (!(result.IsNumber() && result.IsInRange()))
            {
                long mantissa = NextLong(52);
                int exponent = _random.Next(-1023 - 52, 1024 - 52);
                int sign = NextBool() ? -1 : +1; // Gets us -1 or +1.
                result = sign * (double)mantissa * (double)Math.Pow(2.0, exponent);
                var dc = new DoubleComponents(result);
                Debug.Assert(result == dc.CalcValue());
            }
            return result;
        }
コード例 #4
0
        // Returns a double in the range where we expect the robust arithmetic to be valid
        // - exponents between -142 and 201. (According to S. p.3)
        public double NextDoubleValidRange()
        {
            double result = double.NaN;

            while (!(result.IsNumber() && result.IsInRange()))
            {
                long mantissa = NextLong(52);
                int  exponent = _random.Next(-1023 - 52, 1024 - 52);
                int  sign     = NextBool() ? -1 : +1; // Gets us -1 or +1.
                result = sign * (double)mantissa * (double)Math.Pow(2.0, exponent);
                var dc = new DoubleComponents(result);
                Debug.Assert(result == dc.CalcValue());
            }
            return(result);
        }