public virtual void ComputeSize()
{
double requiredPower = Power;
// Attempt to locate the optimal sample size
// to attain the required power by locating
// a zero in the difference function:
double sol = BrentSearch.FindRoot(alpha =>
{
Size = alpha;
ComputePower();
return requiredPower - Power;
},
lowerBound: 0,
upperBound: 1);
// Check it
Size = sol;
ComputePower();
double newPower = Power;
Power = requiredPower;
if (Math.Abs(requiredPower - newPower) > 1e-5)
Effect = Double.NaN;
}