static cmpl get_value_at_index (struct disp_table const dt[], int idx) { double nr, ni; nr = data_table_get (dt->table_ref, idx, 0); ni = data_table_get (dt->table_ref, idx, 1); return nr - I * ni; }
cmpl disp_sample_table_n_value (const disp_t *disp, double _lam) { const struct disp_sample_table *dt = & disp->disp.sample_table; struct data_table *t = dt->table_ref; float lam = _lam; int j, nb = dt->nb; for (j = 0; j < nb-1; j++) { double jlam = data_table_get (t, j+1, 0); if (jlam >= lam) break; } if (j >= nb-1) return data_table_get (t, j, 1) + data_table_get (t, j, 2) * I; float lam1 = data_table_get (t, j, 0), lam2 = data_table_get (t, j+1, 0); int j1 = j, j2 = j+1; float a = (lam - lam1) / (lam2 - lam1); float complex n1 = data_table_get (t, j1, 1) - data_table_get (t, j1, 2) * I; float complex n2 = data_table_get (t, j2, 1) - data_table_get (t, j2, 2) * I; return n1 + (n2 - n1) * a; }