Solves the charge balance by bisection on [3, 9]. That's safe because the
residual is strictly monotone: the grist term falls linearly with pH, every
acid term rises with it (more dissociation), and the water term supplies less
base. It converges to options.convergenceTolerancePh (default 1e-6 pH),
which a 6-unit bracket reaches in 23 halvings. The iteration cap is 100.
Returns NaN with a warning when the grist has no buffering at all (an
all-extract recipe). Mash pH isn't defined there, and returning 5.4 would be
wrong.
Predict mash pH.
Solves the charge balance by bisection on [3, 9]. That's safe because the residual is strictly monotone: the grist term falls linearly with pH, every acid term rises with it (more dissociation), and the water term supplies less base. It converges to
options.convergenceTolerancePh(default 1e-6 pH), which a 6-unit bracket reaches in 23 halvings. The iteration cap is 100.Returns
NaNwith a warning when the grist has no buffering at all (an all-extract recipe). Mash pH isn't defined there, and returning 5.4 would be wrong.