14 Real wsum, shift, cff;
21 Real Fbeta = Real(4.0);
22 Real Fgamma = Real(0.284);
38 for(
int i=1;i<=2*ndtfast;i++) {
57 scale=(Falpha+
one)*(Falpha+Fbeta+
one) /
58 ((Falpha+
two)*(Falpha+Fbeta+
two)*Real(ndtfast));
64 gamma = Fgamma*max(
zero,
one-Real(10.0)/Real(ndtfast));
66 for (
int iter=1;iter<=16;iter++) {
68 for(
int i=1;i<=2*ndtfast;i++) {
71 weight1[i-1]=Real(pow(cff,Falpha)-pow(cff,(Falpha+Fbeta)))-gamma*cff;
73 if (weight1[i-1] >
zero) {
77 if ( (
nfast>0) && (weight1[i-1] <
zero) ) {
83 for(
int i=1;i<=
nfast;i++) {
84 wsum=wsum+weight1[i-1];
85 shift=shift+weight1[i-1]*Real(i);
87 scale *= shift/(wsum*Real(ndtfast));
106 for (
int iter=1;iter<=ndtfast;iter++) {
109 for(
int i=1;i<=
nfast;i++) {
110 wsum=wsum+weight1[i-1];
111 shift=shift+Real(i)*weight1[i-1];
114 cff=Real(ndtfast)-shift;
121 for (
int i=
nfast;i>=2;i--) {
122 weight1[i-1]=weight1[i-1-1];
125 }
else if (cff>
zero) {
127 for (
int i=
nfast;i>=2;i--) {
128 weight1[i-1]=wsum*weight1[i-1]+cff*weight1[i-1-1];
130 weight1[1-1]=wsum*weight1[1-1];
131 }
else if (cff < Real(-1.0)) {
133 for (
int i=1;i<=
nfast;i++) {
134 weight1[i-1]=weight1[i+1-1];
137 }
else if (cff <
zero) {
139 for (
int i=1;i<=
nfast-1;i++) {
140 weight1[i-1]=wsum*weight1[i-1]-cff*weight1[i+1-1];
149 for(
int j=1;j<=
nfast;j++) {
151 for(
int i=1;i<=j;i++) {
152 weight2[i-1]=weight2[i-1]+cff;
161 for(
int i=1;i<=
nfast;i++) {
162 wsum=wsum+weight1[i-1];
163 cff=cff+weight2[i-1];
169 for(
int i=1;i<=
nfast;i++) {
170 weight1[i-1]=wsum*weight1[i-1];
171 weight2[i-1]=cff*weight2[i-1];