Stoner Physics

Rifle ballistics

Powder temperature sensitivity calculator

The same load leaves the muzzle at a different speed on a cold morning than on a hot afternoon, because a propellant’s performance changes with its temperature. How much depends on the powder and on the load: in Hodgdon’s own test at 0, 70 and 125 °F, one .308 load’s velocity varied by 114 ft/s and another’s by 8, and Hornady says a coefficient measured with your own load beats its table of averages. Enter the averages from two to five chronograph sessions and this works out the muzzle velocity change per degree — below and above your baseline separately, the way Hornady’s 4DOF solver takes it — checks it against the chronograph’s own scatter, and gives the velocity at the temperature you will shoot in.

Work it out from your chronograph sessions

Each row is one session: the temperature of the ammunition and the average velocity of the string fired at it. The standard deviation and shot count are optional, but without them there is no way to say whether the change is bigger than chronograph noise. The defaults are Hodgdon’s published .308 Winchester test of Winchester 748 powder under a 168 gr Sierra BTHP, with the baseline at Hodgdon’s own 70 °F, so the calculator opens on the worked example further down.

Units and starting point
Chronograph sessions (two to five)

Leave unused rows empty. The temperature is the ammunition’s after it has soaked, not the air’s.

Baseline and shooting temperature

What it assumes. Velocity changes in a straight line with temperature on each side of the baseline, with its own slope on each side — the model Hornady’s 4DOF uses. Where a side has more than one session, its slope is fitted by least squares through the baseline point. Unless you enter a baseline velocity, it is read off the sessions by straight-line interpolation. Anything colder than the coldest session or hotter than the hottest is extrapolation, and is flagged. The noise check takes each session average as uncertain by SD ÷ √shots and flags any coefficient that 95 % confidence cannot tell from zero: one smaller than its standard error times Student’s t, which is 2.10 for two ten-shot strings and more for shorter ones. The elevation figure uses drop ∝ 1/V², an approximation for a supersonic bullet, and counts the velocity change alone, not the change in air density. It predicts velocity only and says nothing about chamber pressure.

The method

Hornady’s technical document for Version II of its 4DOF solver, written in November 2016, is the clearest published statement of it. The document puts the size of the effect at anywhere from 30–50 ft/s over a 150 °F span to hundreds of feet per second, depending on caliber, primer and above all the propellant. Its manual calculation is a single division: the difference in velocity between two test temperatures over the difference in temperature.

TSC = (V2 − V1) ÷ (T2 − T1) TSC = temperature sensitivity coefficient, velocity per degree · V1, V2 = average velocities of the two strings · T1, T2 = the ammunition’s temperature for each

It asks for three sessions, not two: one at a baseline and one each well below and well above it. Its example is 20, 70 and 100 degrees, with the range set by the temperatures you actually shoot in, and it says the ammunition needs enough soak time to reach each test temperature. It expects two coefficients, because the change per degree is usually not the same above the baseline as below it. You enter the one that matches the conditions, and the solver moves the velocity entered at the baseline by it:

V(T) = Vb + TSCbelow · (T − Tb)    when T is below Tb
V(T) = Vb + TSCabove · (T − Tb)    when T is above Tb Tb = baseline temperature · Vb = velocity at the baseline

If velocity rises in the cold or falls in the heat, Hornady says to enter the coefficient as a negative number, and the calculator allows it. Hodgdon’s table has both cases: in 30-06, AA 4350 ran 15 ft/s faster at 0 °F than at 70 and 14 slower at 125; in .308, Reloder 15 lost 10 ft/s between 70 and 125 °F. Hornady also ships a table of general coefficients by powder, but says a coefficient measured with your own load is more accurate than the table, which averages many loads. It leaves ball powders out of that table altogether because they are typically far more sensitive, and recommends measuring your own.

More than three sessions

Two points fix a line exactly. When one side of the baseline has two or more sessions, the calculator fits that side’s line by least squares, pinned at the baseline:

TSC = Σ (Ti − Tb)(Vi − Vb) ÷ Σ (Ti − Tb)² summed over the sessions on that side; with one session it is the two-point formula above

It also fits a single straight line through every session, with the ordinary least-squares slope given in section 4.4.3.1 of the NIST/SEMATECH e-Handbook of Statistical Methods, and reports how far that line misses the worst session:

b = Σ (Ti − T̄)(Vi − V̄) ÷ Σ (Ti − T̄)² T̄, V̄ = means of the session temperatures and velocities

If the single line misses by more than the chronograph can explain, one number does not describe the load, and the two coefficients are the better model.

Is the change bigger than the chronograph’s scatter?

A session average is itself uncertain. Its standard error is s ÷ √n — the string’s standard deviation over the square root of the number of shots — and the difference between two independent averages carries the combined error that the NIST two-sample t-test uses (e-Handbook section 1.3.5.3). For a coefficient from two sessions:

u(TSC) = √( s1²/n1 + s2²/n2 ) ÷ |T2 − T1|

Every coefficient and velocity change the calculator gives is a weighted sum of the session averages, so the same idea carries through the general propagation-of-error formula (e-Handbook section 2.5.5): with the sessions independent, the variance of the result is the sum, over the sessions, of each weight squared times that session’s squared standard error.

Whether a figure is bigger than the scatter is then the t-test’s question. The two-sample test rejects “no difference” when the difference is more than t1−α/2, ν standard errors, with the degrees of freedom ν from the Welch formula; for a figure built from more than two sessions the same formula, Welch–Satterthwaite, combines each session’s shots − 1 (e-Handbook section 2.5.7.1). At 95 % confidence and equal SDs, t is 2.10 for two strings of ten shots each (18 degrees of freedom), 2.78 for two of three shots (4) and 4.30 for two of two shots (2), from the e-Handbook’s table of t (section 1.3.6.7.2). The calculator flags any coefficient smaller than that many standard errors, because the data cannot tell it apart from zero.

For a temperature-stable powder that test is hard to pass. Ten shots at an SD of 10 ft/s give a session average with a standard error of 3.2 ft/s, and the difference between two such sessions 4.5 ft/s. A powder that really moves 0.14 ft/s per °F — what PrecisionRifleBlog measured for Varget and H4350 — changes by 7 ft/s over 50 degrees, about 1.6 standard errors against the 2.10 needed: not detectable. The two sessions would need to be about 67 °F apart to reach it. More shots per string or a wider temperature gap are the only remedies; how many shots a string needs is worked through separately.

Units

Neither the Hornady document nor the Hornady–Kestrel guide to entering the coefficient prints its unit. The guide shows a factor of 0.37 on the meter beside a baseline of 75 °F and 2,600 fps, and the Hornady document works in feet per second and degrees Fahrenheit, so ft/s per °F is the natural reading — but it is an inference, and it matters: 0.37 per °F takes that load to 2,581.5 ft/s at 25 °F, while 0.37 per °C would give 2,589.7. Before trusting a device with it, test it: enter a coefficient of 1, set the temperature ten degrees off the baseline, and see whether the velocity it uses moves by ten. The calculator gives every coefficient both ways; one per °C is 1.8 times one per °F.

What it does to the trajectory

The muzzle velocity truing page shows that where drag goes as the square of speed, drop goes as 1/V², so a 1 % slower bullet needs about 2 % more elevation. The calculator prints the elevation change as (Vb ÷ V)² − 1. It is an approximation, and it fails through the transonic region. It also counts the velocity change alone: cold air is denser and adds drop of its own, which a solver works out from the air temperature and pressure you give it.

Worked example: Hodgdon’s .308 test

Hodgdon published velocities and pressures for six powders in .308 Winchester — Winchester-Western case, WLR primer, 168 gr Sierra BTHP — at 0, 70 and 125 °F. That is Hornady’s three-session layout, with the baseline at 70. Winchester 748 averaged 2,655, 2,724 and 2,769 ft/s.

Below the baseline(2,724 − 2,655) ÷ (70 − 0) = 69 ÷ 70 = 0.986 ft/s per °F (1.774 per °C)
Above the baseline(2,769 − 2,724) ÷ (125 − 70) = 45 ÷ 55 = 0.818 ft/s per °F (1.473 per °C)
One line through all three0.915 ft/s per °F; it misses the 70 °F session by 3.4 ft/s
Velocity at 25 °F2,724 − 0.986 × 45 = 2,679.6 ft/s
Elevation at 25 °F, from the velocity alone(2,724 ÷ 2,679.6)² − 1 = about 3.3 % more than at 70 °F

The two differences, +45 and −69 ft/s, are the hot and cold variations Hodgdon prints for this powder, and together they make its 114 ft/s extreme spread. Varget in the same table averaged 2,778, 2,771 and 2,779 ft/s: a negative coefficient below the baseline (−0.100 ft/s per °F, faster in the cold) and 0.145 above it. Hodgdon prints no standard deviations or shot counts, so there is no telling whether 7 or 8 ft/s is anything more than scatter. Had each string been ten shots at an SD of 10 ft/s, the coefficients would be 1.6 and 1.8 standard errors from zero, short of the 2.10 that 95 % confidence needs, and the calculator would flag both.

Checked against published figures

SourcePublished dataPublished per degreeThis calculator
PrecisionRifleBlog, 6mm Dasher, Varget2,821 ft/s at 5 °F, 2,835 at 108 °F0.1360.136
PrecisionRifleBlog, 6mm Creedmoor, H43503,088 ft/s at 5 °F, 3,102 at 105 °F0.1400.140
Handloader chart, as reproduced by PrecisionRifleBlog+87 ft/s from 70 to 115 °F1.91.933
Todd Hodnett, as reported by PrecisionRifleBlog: military ammunition, Reloder 15160 ft/s from 40 to 140 °Fnone printed1.600
Long Range Hunting forum, 20162,895, 2,935, 2,970, 3,010 ft/s at 10, 40, 70, 100 °F1.281.278 end to end; 1.267 by least squares
Hornady–Kestrel guidefactor 0.37, baseline 75 °F, 2,600 fpsno result printed2,581.5 ft/s at 25 °F, reading it as per °F

Per-degree figures are ft/s per °F. The forum post writes its change as 105 ft/s over 90 degrees, but its own end points are 115 ft/s apart, and 115 ÷ 90 is the 1.28 it prints. Least squares through all four points gives 1.267, close to the end-to-end figure because the four lie almost on one line.

Where it goes wrong

It is the powder’s temperature, not the air’s. PrecisionRifleBlog’s 2025 test soaked each batch for 8 hours with a temperature logger wrapped in with the ammunition, took the logged average for the last hour, and fired as soon as the batch came out. The same article points out the reverse case: ammunition left in the sun on a dark surface can reach 115 °F without the air being that hot.

Hornady’s and Kestrel’s solvers key off the air temperature. The Hornady document applies the coefficient using the baseline and the atmospheric temperature you enter. Kestrel’s own answer for ammunition that is warmer or colder than the air is a workaround: turn the velocity–temperature table on, set the environment temperature to the ammunition’s, let the velocity update, turn the table off to lock that velocity in, then set the environment back to the real conditions.

A trued velocity belongs to one temperature. The manual for Kestrel’s Applied Ballistics meters says that when a muzzle velocity calibration finishes, the meter offers to store the new velocity as a table entry at the current temperature. If the table is on and that is declined, it asks to turn the table off, because otherwise the table would overwrite the calibrated value. Truing to drop at distance and correcting for powder temperature are two adjustments to the same number, and they have to agree about which temperature it belongs to.

It is not a straight line. PrecisionRifleBlog’s Dasher load moved close to 0.2 ft/s per °F between 5 and 33 °F, and only 0.1 between 58 and 108. Hodgdon’s W748 load is 0.986 below its baseline and 0.818 above it. The Long Range Hunting post says the same thing and asks for at least four sessions, 30 °F apart, from the current lot of powder. Keep the two coefficients separate and stay inside the temperatures you tested.

Use one chronograph for every session. A fixed bias in the instrument cancels in a difference only if the same instrument measured both ends. A percentage error, such as screens spaced 1 % wrong, scales the coefficient by the same 1 %, which rarely matters.

Velocity is not pressure. In Hodgdon’s 30-06 table, VIT N550 gained 44 ft/s between 70 and 125 °F while its pressure went from 50,100 to 60,200 CUP, a 20 % rise for a 1.5 % change in velocity. Nothing on this page says whether a load is safe at a given temperature; only pressure data does.

Carrying it into a solver

Range Walkout Coming soon, our long-range ballistic solver for Android, solves with one muzzle velocity per rifle profile (the trued one, once you have trued it) and uses the temperature you give it for the air alone: it does not adjust velocity for powder temperature. So its true-to-impact back-computation folds any powder-temperature shift into the trued velocity, and the result belongs to the temperature the ammunition was on the day you trued it. To carry it to another day, enter the trued velocity above as the velocity at the baseline, with that day’s ammunition temperature as the baseline, and type the velocity the calculator gives for today into Range Walkout’s muzzle velocity field. Typing a velocity there replaces the trued one, which is what you want here.

All our instruments →

Related: truing muzzle velocity · chronograph velocity statistics · spin drift · the Coriolis effect on a rifle bullet

Sources

Questions or corrections: [email protected]