Changelog ▾
v3.2 (Oct 25, 2026) — Exact constants. Air now uses the coherent set of the ICAO standard atmosphere (ISO 2533): R* = 8.31432 J/(mol·K) and Md = 28.9644 g/mol (was 8.31446 and 28.964), which reproduces the standard density 1.2250 kg/m³; water vapour 18.01528 g/mol (IUPAC). The speed of sound at 0 °C is derived from the same constants, 331.3185 m/s (was the rounded 331.3). The BC conversion (703.0696, was 703.07), inHg (33.86389 hPa, was 33.8639), grains (the last digit of 0.06479891 g was missing) and ft·lbf are computed from their defining values. Air density rises by 0.003 % and the speed of sound by 0.006 %; the drop at 1000 m changes by less than 1 mm, and the barometric exponent becomes 5.2559 (was 5.2557). Hunt class: a short line under the class says which game it allows, and the tooltip lists the game per class with the sections of NFS 2023:8. Class 4 is now shown whenever the muzzle energy is at least 150 J, also when E₁₀₀ cannot be computed (the badge showed “—”). When no class applies, the card says “No class (E₀ < 150 J)” instead of “—”.
v3.1.1 (Oct 16, 2026) — Results that no longer match the input are dimmed and marked when a calculation stops on an input error (they stayed on screen looking valid). Number checks: a field must contain only a number — text such as “12abc” was read as 12, and invalid text in humidity, v₀ sensitivity, shooting angle or the v₀ spread was silently replaced by 0 or the default; invalid text is no longer replaced by 0 when you leave a field. Humidity must be 0–100 % (empty = 0). Unit switches stay correct when the browser blocks storage (the previous unit was read from storage). Spin effects: below Sg 1.0 the bullet is expected to tumble; spin drift and jump are then computed at Sg 1.0 and the status line says they are not reliable (Litz's relations were extrapolated below 1.0). Tooltips near the bottom of the window open upwards. The theme switch can be used with the keyboard. If the chart library cannot load, the table and cards are still shown.
v3.1 (Oct 14, 2026) — Pressure reference and elevation for the zero day and the shooting day. Weather apps and reports almost always give pressure reduced to sea level, also for your own town; with Sea level the calculator converts the value to the actual pressure on site from the entered elevation and that day's temperature (weather-service reduction, T₀ = T + L·h). On site uses the value as entered. The default is sea level at 0 m, which gives exactly the same results as before; previously the field was meant as the pressure on site, while the shooting-day tooltip suggested weather-report values. The converted pressure on site is shown next to each elevation. New input checks: pressure 850–1100 hPa at sea level, 400–1100 hPa on site; elevation −500 to 6000 m (ft when the range unit is yd); temperature between −100 and +100 °C; the water vapour pressure must stay below the air pressure; max range and table step must be positive, the step no larger than the range, and at most 2000 table rows (a zero or empty field was silently replaced by 200 and 25); the v₀ spread must be smaller than v₀, and the Phase 3 change must leave v₀ positive. The sensitivity analysis perturbs the pressure as entered. Tooltips: a click or tap on “?” pins the tip, so it stays open while you scroll; long tips scroll inside; close with another click on “?”, a click or tap outside, or Escape. An unverified example in the zero-day pressure tooltip was removed.
v3.0.2 (Oct 12, 2026) — Humid speed of sound now uses the exact ideal-gas mixture (heat-capacity ratio and molar mass of the air/water-vapour mixture) instead of the approximation √(1 + 0.32·e/p). Dry air is unchanged. The difference is at most ~0.25 % in hot, humid air at low pressure, otherwise ≤ 0.05 %. Formula display in the model notes corrected (it showed the old 0.16 factor). Attribution for the drag tables (Gehtsoft BallisticCalculator, LGPL-2.1) added. Summary cards: the Velocity card now shows shooting-day values only — V@100 m or V@100 yd follows the range unit like the wind card (previously V@100 came from the ICAO reference trajectory). E₁₀₀ and the hunt class always refer to 100 m in the ICAO reference, as defined by the regulation; the heading says so also in yard mode (it said “hunt class at 100yd”). Wind drift @100 is now evaluated exactly at 100 m/yd (it took the nearest table row, e.g. 90 m with a 30 m step). Table: with Phase 3 active, the Shoot and Δ columns now follow the same shooting-day trajectory as v, E and wind (incl. propellant temperature; header “Shoot +P3”) — previously they showed the Phase 2 trajectory, so one row mixed two trajectories. The chart and the vital-zone summary still show Phase 2 and Phase 3 separately.
v3.0.1 (Oct 11, 2026) — Optimize zero range for vital zone: the result is rounded down (0.1 m or yd) and solved 0.1 mm inside the zone, so the zero-day apex is always within the vital zone (the old midpoint and round-to-nearest could exceed it by a fraction of a millimetre and show ✗).
v3.0 (Oct 11, 2026) — Hunt classes per NFS 2023:8 (in force since Aug 2023): new Bullet material input — a lead-free bullet ≥ 7.7 g reaches class 1 at E₁₀₀ ≥ 2000 J; class 4 now means muzzle energy ≥ 150 J, and “—” is shown when no class applies (previously everything else was K4). E₁₀₀ for the class is computed with the chronograph-corrected v₀ in the ICAO standard atmosphere, level, no wind, so the class no longer changes with the weather. Velocity and energy in the table and the zero-range cards are now shooting-day values including Phase 3 (previously zero-day values: on a cold day with a propellant coefficient the energy was overstated by up to ~11 %). Chronograph correction is now an exact inversion (previously an approximation that was up to ~16 m/s low for slow, low-BC loads at 50 m); maximum chronograph distance 100 m. Humid speed of sound corrected (the humidity term was half its physical size; up to a few cm at long range in hot, humid air). Zero-angle search widened to ±0.30 rad (reachable zeros of slow loads were refused). Vital-zone summary also shows where a long zero rises above the vital zone. G1→G7 estimate factor 1.98 (was 1.95). Wind and velocity at the zero range now shown even when the zero lies beyond the table. G7 drag table reduced to the published 84 points (no numerical effect). Texts corrected: station pressure, JBM comparison with the documented JBM run, model notes, humidity formula name.
v2.9 (Sep 20, 2026) — New optional panel Spin effects (advanced) under Rifle & Bullet: enter Sg from the Stability Calculator to get spin drift (relative to the line of sight, zero at the zero range) and aerodynamic jump as two extra table columns. Left empty, the app behaves exactly as before.
v2.8 (Sep 20, 2026) — Shooting angle: the rifle is zeroed level and the angled shot is computed with the full gravity vector, so uphill/downhill shots now show how much higher they hit (previously the zero was re-solved at the angle, which hid the effect); level shots are unchanged. Wind drift is evaluated on the shooting-day trajectory (atmosphere and propellant temperature). Zero-range estimators always assume a level range.
v2.7 (Sep 20, 2026) — Robustness: sensitivity analysis works at any max range (showed NaN beyond ~300 m); empty or invalid fields give a clear message instead of NaN; phase buttons redraw the chart directly; wind-drift warning threshold corrected to 50 mm; long ranges (1000 m+) are fully tabulated; wind-drift chart uses a true range axis.
v2.6 (Jul 3, 2026) — Chronograph correction applied uniformly (sensitivity analysis, zero-range estimator, vital-zone optimizer); tooltips work on touch devices.
v2.5 (Apr 17, 2026) — Terminology unified (Phase 2 = “shooting”); sensitivity analysis follows the selected pressure and temperature units.
v2.4 (Apr 17, 2026) — Unit review: metres for chronograph distance, mbar for pressure; v₀ sensitivity now converted when switching °C/°F.
v2.3 (Apr 17, 2026) — Clearer section headings; crosswind units are now m/s, km/h and mph.
v2.2 (Apr 17, 2026) — Input panel reorganised: vital zone next to zero range, chronograph details in a collapsible panel.
v2.1 — Unified layout for the two zero-range estimators.