Rewrite the dFixedMultiplier calculation using only double-precision arithmetic (for easier mainline integration).

master
Mikael Hirki 2013-08-02 20:24:51 +03:00
parent 4f713098f2
commit e4e39c544f
1 changed files with 5 additions and 4 deletions

View File

@ -1189,9 +1189,10 @@ double EstimateCandidatePrimeProbability(unsigned int nPrimorialMultiplier)
// prime chains.
const unsigned int nSieveWeaveOptimalPrime = vPrimes[(unsigned int) ((uint64) nSievePercentage * vPrimes.size() / 100) - 1];
const unsigned int nAverageCandidateMultiplier = nSieveSize / 2;
mpz_class mpzPrimorial;
Primorial(nPrimorialMultiplier, mpzPrimorial);
mpz_class mpzFixedMultiplier = mpzPrimorial / PrimorialFast(nPrimorialHashFactor);
double dFixedMultiplier = mpzFixedMultiplier.get_d();
double dFixedMultiplier = 1.0;
for (unsigned int i = 0; vPrimes[i] <= nPrimorialMultiplier; i++)
dFixedMultiplier *= vPrimes[i];
for (unsigned int i = 0; vPrimes[i] <= nPrimorialHashFactor; i++)
dFixedMultiplier /= vPrimes[i];
return (1.781072 * log((double)std::max(1u, nSieveWeaveOptimalPrime)) / (255.0 * log(2.0) + log(1.5) + log(dFixedMultiplier) + log(nAverageCandidateMultiplier)));
}