/* * look1_pbinlxpw.cpp * * Academic License - for use in teaching, academic research, and meeting * course requirements at degree granting institutions only. Not for * government, commercial, or other organizational use. * * Code generation for model "VFControl". * * Model version : 1.1 * Simulink Coder version : 24.1 (R2024a) 19-Nov-2023 * C++ source code generated on : Wed Oct 16 10:45:53 2024 * Created for block: VFControl */ #include "look1_pbinlxpw.h" #include "rtwtypes.h" real_T look1_pbinlxpw(real_T u0, const real_T bp0[], const real_T table[], uint32_T prevIndex[], uint32_T maxIndex) { real_T frac; real_T yL_0d0; uint32_T bpIdx; /* Column-major Lookup 1-D Search method: 'binary' Use previous index: 'on' Interpolation method: 'Linear point-slope' Extrapolation method: 'Linear' Use last breakpoint for index at or above upper limit: 'off' Remove protection against out-of-range input in generated code: 'off' */ /* Prelookup - Index and Fraction Index Search method: 'binary' Extrapolation method: 'Linear' Use previous index: 'on' Use last breakpoint for index at or above upper limit: 'off' Remove protection against out-of-range input in generated code: 'off' */ if (u0 <= bp0[0U]) { bpIdx = 0U; frac = (u0 - bp0[0U]) / (bp0[1U] - bp0[0U]); } else if (u0 < bp0[maxIndex]) { uint32_T found; uint32_T iLeft; uint32_T iRght; /* Binary Search using Previous Index */ bpIdx = prevIndex[0U]; iLeft = 0U; iRght = maxIndex; found = 0U; while (found == 0U) { if (u0 < bp0[bpIdx]) { iRght = bpIdx - 1U; bpIdx = ((bpIdx + iLeft) - 1U) >> 1U; } else if (u0 < bp0[bpIdx + 1U]) { found = 1U; } else { iLeft = bpIdx + 1U; bpIdx = ((bpIdx + iRght) + 1U) >> 1U; } } frac = (u0 - bp0[bpIdx]) / (bp0[bpIdx + 1U] - bp0[bpIdx]); } else { bpIdx = maxIndex - 1U; frac = (u0 - bp0[maxIndex - 1U]) / (bp0[maxIndex] - bp0[maxIndex - 1U]); } prevIndex[0U] = bpIdx; /* Column-major Interpolation 1-D Interpolation method: 'Linear point-slope' Use last breakpoint for index at or above upper limit: 'off' Overflow mode: 'portable wrapping' */ yL_0d0 = table[bpIdx]; return (table[bpIdx + 1U] - yL_0d0) * frac + yL_0d0; }