672 {
674 {
677 const complex *x0 = x0t0, *t0 = x0t0 + n;
678 const double t = (*(
double*)t0) *
bigT;
679 slpSxS->evaluate(n, x0, SxS);
680 slpTxT->evaluate(n, x0, TxT);
683 double mS = c -
productST *
s / sqrt_one_minus_productST_2;
684 double mT =
s / sqrt_one_minus_productST_2;
685 int j, i;
686 for (j = 0; j < n - 1; j++)
687 for (i = 0; i < n; i++)
688 *(Hxt + i * n + j) =
689 *(SxS + i * (n - 1) + j) * mS + *(TxT + i * (n - 1) + j) * mT;
690 j = n - 1;
691 for (i = 0; i < n; i++) *(Hxt + i * n + j) = (x0 + i)->getconjugate();
692 i = n;
693 mS = -
s -
productST * c / sqrt_one_minus_productST_2;
694 mT = c / sqrt_one_minus_productST_2;
695 for (j = 0; j < n - 1; j++)
696 {
697 complex tt =
698 *(SxS + i * (n - 1) + j) * mS + *(TxT + i * (n - 1) + j) * mT;
699 *(Hxt + i * n + j) = tt;
700 }
701 *(Hxt + n * n + n - 1) = complex(0.);
704 }
705 else
706 slpHxt->evaluate(n + 1, x0t0, Hxt);
707 }
StraightLineProgram * slpHxt
StraightLineProgram * slpSxS
StraightLineProgram * slpTxT
const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode=mpreal::get_default_rnd())
const mpreal cos(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
const mpreal sin(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
#define newarray_atomic(T, len)