伪随机双倍和的界限

时间:2016-12-15 05:23:08

标签: c++

所以我有一个生成随机数的函数:

void createRandom(int seed, int count, double min, double max, std::vector<double>& out) {
        srand( seed );
        out.reserve( count ); out.clear();
        while( count-- > 0 ) {
            out.push_back( min + (max-min) * ((double)rand() / (double)RAND_MAX) );
}

让我们假设我有100个这样的数字存储在100到101之间的向量中,即。 createRandom(22, 100, 100, 101, rand); 我的问题是,如果我这样做,那么所有数字之和的理论上限和上限是否存在差异:

  1. 使用循环和+运算符
  2. 添加它们
  3. accumulate(rand.begin(), rand.end(), 0.0, mySum);
  4. mySum()具有以下实现:

    double mySum(double a, double b)
    {
        return reducePrecision(a) + reducePrecision(b);
    }
    
    double reducePrecision( double x ) { 
        int exp; 
        double m = frexp(x, &exp); 
        m = roundFloat( m, 10 ); 
        return ldexp( m, exp ); 
    }
    double roundFloat( double x, int binaryDigits ) { 
        return ldexp( floor( ldexp( x, binaryDigits ) + 0.5 ), -binaryDigits ); 
    }
    

    如果是,为什么?问候。

0 个答案:

没有答案