Three parts, in order

The heat index is not one equation. It is a procedure with three branches, and skipping any of them is how implementations end up disagreeing.

  1. Try the simple form first. Compute 0.5 × (T + 61 + (T − 68) × 1.2 + RH × 0.094), average it with the air temperature, and if that average is below 80°F, the simple form is the answer. No band applies down there.
  2. Otherwise use the regression. Nine terms in T and RH, below.
  3. Then apply whichever correction fits. One for very dry air, one for very humid air. Both are official and both are commonly forgotten.

The regression

With T in degrees Fahrenheit and RH as a percentage:

Rothfusz, 1990

HI =
−42.379 + 2.04901523·T + 10.14333127·RH − 0.22475541·T·RH − 0.00683783·T² − 0.05481717·RH² + 0.00122874·T²·RH + 0.00085282·T·RH² − 0.00000199·T²·RH²

The coefficients have no individual meaning. They are the output of a curve fit, which is why nobody can tell you what −0.00000199 represents.

The two corrections

Dry air, when RH < 13% and 80°F ≤ T ≤ 112°F — subtract:

Adjustment
((13 − RH) / 4) × √((17 − |T − 95|) / 17)

Humid air, when RH > 85% and 80°F ≤ T ≤ 87°F — add:

Adjustment
((RH − 85) / 10) × ((87 − T) / 5)
+2.1°F The largest this second correction ever gets: at 80°F and 100% humidity.

That second one is the source of the discrepancy between the equation and the printed NOAA chart. Twelve cells of the table sit inside its range, and the graphic does not apply it. The chart guide shows exactly where.

Where it stops being valid

  • Below 80°F, the regression is not used. If you evaluate the polynomial down there anyway, it produces nonsense — negative heat indices at low temperatures.
  • The reference person is specific. Steadman's conditions assume 1.7 m and 67 kg, walking, in long trousers and a short-sleeved shirt, in shade, with a 2.5 m/s breeze. Someone stationary in still air, or working hard, or in protective clothing, is not that person.
  • Shade only. Full sun adds up to 15°F, which is not in the equation.
  • No wind term at all. A 10 m/s wind changes the real thermal load substantially and changes the heat index not at all. If wind matters to your decision, you want WBGT.

Checking an implementation

Three test values catch most mistakes:

Spot values from the equation, corrections included.
TRHHeat indexWhat it tests
90°F70%106°FThe plain regression
100°F10%Below 100°FThe dry-air correction is present
80°F100%86°FThe humid-air correction is present
75°F60%No bandThe Steadman fallback, and no invented category

The last row is the one most worth checking in someone else's app. A needle sitting in "Caution" at 78°F means the fallback branch is missing, and a category has been invented that no published source defines.