# Brix.frink

``` // Conversion from specific gravity to/from Brix and other scales. //  This uses the equation developed by J. Hackbarth (2011), which is based on // the AOAC Brix tables (Horwitz and Latimer, 2005), to convert from Brix to // specific gravity. // //  The Brix scale is virtually identical to the Balling and Plato scales. // // See: //  http://web2.airmail.net/sgross/fermcalc/fermcalc_conversions.html // // TODO:  Correct for hydrometer temperature.  See: //   http://web2.airmail.net/sgross/fermcalc/fermcalc_alcohol.html class Brix {    class var coeffs = [1, +0.3875135555, +0.09702881653, +0.3883357480,              -1.782845295, +5.591472292, -11.00667976, +13.62230734,              -10.33082001, +4.387787019, -0.7995558730]    // Convert a Brix value, expressed as a dimensionless number, to a    // specific gravity (which is a dimensionless number comparing the density    // of the liquid to that of water.)    class BrixToSG[brix is dimensionless] :=    {       sg = 1       bp = brix/100       for k=1 to 10          sg = sg + coeffs@k bp^k       return sg    }    // Convert a specific gravity, expressed as a dimensionless number, to a    // Brix value (returned as a dimensionless number.)    // This inverts the BrixToSG calculation using the secant method.    // (Note that this could now just call secant.frink's method    // inverseSecant.)    class SGToBrix[sg is dimensionless] :=    {       // Estimation function taken from       // http://en.wikipedia.org/wiki/Brix#Tables       brix1 = 261.3 (1 - 1/sg)            brix2 = 261.3 (1 - 1/(sg+0.00001))       sg1 = BrixToSG[brix1]       sg2 = BrixToSG[brix2]       while (true)       {          invSlope = (brix2-brix1)/(sg2 - sg1)          bnew = brix1 + (sg - sg1) invSlope          sgnew = BrixToSG[bnew]          if abs[sgnew - sg] < 1e-8             return bnew          sg2 = sg1          sg1 = sgnew          brix2 = brix1          brix1 = bnew       }    } } ```

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18657 days, 14 hours, 1 minutes ago.