Пример #1
0
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;
}
Пример #2
0
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;
}