docs: void cfftf(double a[], int offa, int isign) {
  		int idot;
  		int l1, l2;
  		int na, nf, ip, iw, ido, idl1;
  		final int twon = 2 * n;
  
  		int iw1, iw2;
  		double[] ch = ch2;
  
  		iw1 = twon;
  		iw2 = 4 * n;
  		nac[0] = 0;
  		nf = (int) wtable[1 + iw2];
  		na = 0;
  		l1 = 1;
  		iw = iw1;
  		for (int k1 = 2; k1 <= nf + 1; k1++) {
  			ip = (int) wtable[k1 + iw2];
  			l2 = ip * l1;
  			ido = n / l2;
  			idot = ido + ido;
  			idl1 = idot * l1;
  			switch (ip) {
  				case 4:
  					if (na == 0) {
  						passf4(idot, l1, a, offa, ch, 0, iw, isign);
  					} else {
  						passf4(idot, l1, ch, 0, a, offa, iw, isign);
  					}
  					na = 1 - na;
  					break;
  				case 2:
  					if (na == 0) {
  						passf2(idot, l1, a, offa, ch, 0, iw, isign);
  					} else {
  						passf2(idot, l1, ch, 0, a, offa, iw, isign);
  					}
  					na = 1 - na;
  					break;
  				case 3:
  					if (na == 0) {
  						passf3(idot, l1, a, offa, ch, 0, iw, isign);
  					} else {
  						passf3(idot, l1, ch, 0, a, offa, iw, isign);
  					}
  					na = 1 - na;
  					break;
  				case 5:
  					if (na == 0) {
  						passf5(idot, l1, a, offa, ch, 0, iw, isign);
  					} else {
  						passf5(idot, l1, ch, 0, a, offa, iw, isign);
  					}
  					na = 1 - na;
  					break;
  				default:
  					if (na == 0) {
  						passfg(nac, idot, ip, l1, idl1, a, offa, ch, 0, iw, isign);
  					} else {
  						passfg(nac, idot, ip, l1, idl1, ch, 0, a, offa, iw, isign);
  					}
  					if (nac[0] != 0)
  						na = 1 - na;
  					break;
  			}
  			l1 = l2;
  			iw += (ip - 1) * idot;
  		}
  		if (na == 0)
  			return;
  		System.arraycopy(ch, 0, a, offa, twon);
  
  	}