ballistics_calculate_zero_angle_with_drag_table_scaled

Function ballistics_calculate_zero_angle_with_drag_table_scaled 

Source
#[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_double
Expand 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.