所以我有一个生成随机数的函数:
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);
我的问题是,如果我这样做,那么所有数字之和的理论上限和上限是否存在差异:
+
运算符accumulate(rand.begin(), rand.end(), 0.0, mySum);
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 );
}
如果是,为什么?问候。