#[unsafe(no_mangle)]pub unsafe extern "C" fn ballistics_calculate_zero_angle_with_drag_table_scaled(
inputs: *const FFIBallisticInputs,
wind: *const FFIWindConditions,
atmosphere: *const FFIAtmosphericConditions,
zero_distance: c_double,
drag_mach: *const c_double,
drag_cd: *const c_double,
drag_table_len: c_int,
cd_scale: c_double,
) -> c_doubleExpand description
ballistics_calculate_zero_angle_with_drag_table with an additional whole-curve
drag scale (MBA-1356): the deck’s interpolated Cd is multiplied by cd_scale at the
same site the base export uses, i.e. Cd_used = table.interpolate(mach) * cd_scale.
cd_scale = 1.0 is neutral and produces byte-identical output to
ballistics_calculate_zero_angle_with_drag_table on the same deck. Pair this with
ballistics_calculate_trajectory_with_drag_table_scaled using the same deck AND the
same cd_scale to fly the solved angle. Typical truing values are in [0.90, 1.10];
values outside that band are accepted here (the engine only rejects non-finite or
non-positive) — an “unusually large” warning is a CLI-only concern (Task 2).
Returns NaN when cd_scale is not finite or not > 0, in addition to every failure
mode of ballistics_calculate_zero_angle_with_drag_table (matching that export’s
NaN sentinel for an invalid deck).
§Safety
Same contract as ballistics_calculate_zero_angle_with_drag_table.