docs: void radbg(final int ido, final int ip, final int l1, final int idl1, final double in[], final int in_off, final double out[], final int out_off, final int offset) {
  		int idij, ipph, j2, ic, jc, lc, is;
  		double dc2, ai1, ai2, ar1, ar2, ds2, w1r, w1i;
  		int nbd;
  		double dcp, arg, dsp, ar1h, ar2h;
  		int iw1 = offset;
  
  		arg = TWO_PI / (double) ip;
  		dcp = Math.cos(arg);
  		dsp = Math.sin(arg);
  		nbd = (ido - 1) / 2;
  		ipph = (ip + 1) / 2;
  		int idx0 = ip * ido;
  		if (ido >= l1) {
  			for (int k = 0; k < l1; k++) {
  				int idx1 = k * ido;
  				int idx2 = k * idx0;
  				for (int i = 0; i < ido; i++) {
  					out[out_off + i + idx1] = in[in_off + i + idx2];
  				}
  			}
  		} else {
  			for (int i = 0; i < ido; i++) {
  				int idx1 = out_off + i;
  				int idx2 = in_off + i;
  				for (int k = 0; k < l1; k++) {
  					out[idx1 + k * ido] = in[idx2 + k * idx0];
  				}
  			}
  		}
  		int iidx0 = in_off + ido - 1;
  		for (int j = 1; j < ipph; j++) {
  			jc = ip - j;
  			j2 = 2 * j;
  			int idx1 = j * l1 * ido;
  			int idx2 = jc * l1 * ido;
  			int idx3 = j2 * ido;
  			for (int k = 0; k < l1; k++) {
  				int idx4 = k * ido;
  				int idx5 = idx4 * ip;
  				int iidx1 = iidx0 + idx3 + idx5 - ido;
  				int iidx2 = in_off + idx3 + idx5;
  				double i1r = in[iidx1];
  				double i2r = in[iidx2];
  
  				out[out_off + idx4 + idx1] = i1r + i1r;
  				out[out_off + idx4 + idx2] = i2r + i2r;
  			}
  		}
  
  		if (ido != 1) {
  			if (nbd >= l1) {
  				for (int j = 1; j < ipph; j++) {
  					jc = ip - j;
  					int idx1 = j * l1 * ido;
  					int idx2 = jc * l1 * ido;
  					int idx3 = 2 * j * ido;
  					for (int k = 0; k < l1; k++) {
  						int idx4 = k * ido + idx1;
  						int idx5 = k * ido + idx2;
  						int idx6 = k * ip * ido + idx3;
  						for (int i = 2; i < ido; i += 2) {
  							ic = ido - i;
  							int idx7 = out_off + i;
  							int idx8 = in_off + ic;
  							int idx9 = in_off + i;
  							int oidx1 = idx7 + idx4;
  							int oidx2 = idx7 + idx5;
  							int iidx1 = idx9 + idx6;
  							int iidx2 = idx8 + idx6 - ido;
  							double a1i = in[iidx1 - 1];
  							double a1r = in[iidx1];
  							double a2i = in[iidx2 - 1];
  							double a2r = in[iidx2];
  
  							out[oidx1 - 1] = a1i + a2i;
  							out[oidx2 - 1] = a1i - a2i;
  							out[oidx1] = a1r - a2r;
  							out[oidx2] = a1r + a2r;
  						}
  					}
  				}
  			} else {
  				for (int j = 1; j < ipph; j++) {
  					jc = ip - j;
  					int idx1 = j * l1 * ido;
  					int idx2 = jc * l1 * ido;
  					int idx3 = 2 * j * ido;
  					for (int i = 2; i < ido; i += 2) {
  						ic = ido - i;
  						int idx7 = out_off + i;
  						int idx8 = in_off + ic;
  						int idx9 = in_off + i;
  						for (int k = 0; k < l1; k++) {
  							int idx4 = k * ido + idx1;
  							int idx5 = k * ido + idx2;
  							int idx6 = k * ip * ido + idx3;
  							int oidx1 = idx7 + idx4;
  							int oidx2 = idx7 + idx5;
  							int iidx1 = idx9 + idx6;
  							int iidx2 = idx8 + idx6 - ido;
  							double a1i = in[iidx1 - 1];
  							double a1r = in[iidx1];
  							double a2i = in[iidx2 - 1];
  							double a2r = in[iidx2];
  
  							out[oidx1 - 1] = a1i + a2i;
  							out[oidx2 - 1] = a1i - a2i;
  							out[oidx1] = a1r - a2r;
  							out[oidx2] = a1r + a2r;
  						}
  					}
  				}
  			}
  		}
  
  		ar1 = 1;
  		ai1 = 0;
  		int idx01 = (ip - 1) * idl1;
  		for (int l = 1; l < ipph; l++) {
  			lc = ip - l;
  			ar1h = dcp * ar1 - dsp * ai1;
  			ai1 = dcp * ai1 + dsp * ar1;
  			ar1 = ar1h;
  			int idx1 = l * idl1;
  			int idx2 = lc * idl1;
  			for (int ik = 0; ik < idl1; ik++) {
  				int idx3 = in_off + ik;
  				int idx4 = out_off + ik;
  				in[idx3 + idx1] = out[idx4] + ar1 * out[idx4 + idl1];
  				in[idx3 + idx2] = ai1 * out[idx4 + idx01];
  			}
  			dc2 = ar1;
  			ds2 = ai1;
  			ar2 = ar1;
  			ai2 = ai1;
  			for (int j = 2; j < ipph; j++) {
  				jc = ip - j;
  				ar2h = dc2 * ar2 - ds2 * ai2;
  				ai2 = dc2 * ai2 + ds2 * ar2;
  				ar2 = ar2h;
  				int idx5 = j * idl1;
  				int idx6 = jc * idl1;
  				for (int ik = 0; ik < idl1; ik++) {
  					int idx7 = in_off + ik;
  					int idx8 = out_off + ik;
  					in[idx7 + idx1] += ar2 * out[idx8 + idx5];
  					in[idx7 + idx2] += ai2 * out[idx8 + idx6];
  				}
  			}
  		}
  		for (int j = 1; j < ipph; j++) {
  			int idx1 = j * idl1;
  			for (int ik = 0; ik < idl1; ik++) {
  				int idx2 = out_off + ik;
  				out[idx2] += out[idx2 + idx1];
  			}
  		}
  		for (int j = 1; j < ipph; j++) {
  			jc = ip - j;
  			int idx1 = j * l1 * ido;
  			int idx2 = jc * l1 * ido;
  			for (int k = 0; k < l1; k++) {
  				int idx3 = k * ido;
  				int oidx1 = out_off + idx3;
  				int iidx1 = in_off + idx3 + idx1;
  				int iidx2 = in_off + idx3 + idx2;
  				double i1r = in[iidx1];
  				double i2r = in[iidx2];
  
  				out[oidx1 + idx1] = i1r - i2r;
  				out[oidx1 + idx2] = i1r + i2r;
  			}
  		}
  
  		if (ido == 1)
  			return;
  		if (nbd >= l1) {
  			for (int j = 1; j < ipph; j++) {
  				jc = ip - j;
  				int idx1 = j * l1 * ido;
  				int idx2 = jc * l1 * ido;
  				for (int k = 0; k < l1; k++) {
  					int idx3 = k * ido;
  					for (int i = 2; i < ido; i += 2) {
  						int idx4 = out_off + i;
  						int idx5 = in_off + i;
  						int oidx1 = idx4 + idx3 + idx1;
  						int oidx2 = idx4 + idx3 + idx2;
  						int iidx1 = idx5 + idx3 + idx1;
  						int iidx2 = idx5 + idx3 + idx2;
  						double i1i = in[iidx1 - 1];
  						double i1r = in[iidx1];
  						double i2i = in[iidx2 - 1];
  						double i2r = in[iidx2];
  
  						out[oidx1 - 1] = i1i - i2r;
  						out[oidx2 - 1] = i1i + i2r;
  						out[oidx1] = i1r + i2i;
  						out[oidx2] = i1r - i2i;
  					}
  				}
  			}
  		} else {
  			for (int j = 1; j < ipph; j++) {
  				jc = ip - j;
  				int idx1 = j * l1 * ido;
  				int idx2 = jc * l1 * ido;
  				for (int i = 2; i < ido; i += 2) {
  					int idx4 = out_off + i;
  					int idx5 = in_off + i;
  					for (int k = 0; k < l1; k++) {
  						int idx3 = k * ido;
  						int oidx1 = idx4 + idx3 + idx1;
  						int oidx2 = idx4 + idx3 + idx2;
  						int iidx1 = idx5 + idx3 + idx1;
  						int iidx2 = idx5 + idx3 + idx2;
  						double i1i = in[iidx1 - 1];
  						double i1r = in[iidx1];
  						double i2i = in[iidx2 - 1];
  						double i2r = in[iidx2];
  
  						out[oidx1 - 1] = i1i - i2r;
  						out[oidx2 - 1] = i1i + i2r;
  						out[oidx1] = i1r + i2i;
  						out[oidx2] = i1r - i2i;
  					}
  				}
  			}
  		}
  		System.arraycopy(out, out_off, in, in_off, idl1);
  		for (int j = 1; j < ip; j++) {
  			int idx1 = j * l1 * ido;
  			for (int k = 0; k < l1; k++) {
  				int idx2 = k * ido + idx1;
  				in[in_off + idx2] = out[out_off + idx2];
  			}
  		}
  		if (nbd <= l1) {
  			is = -ido;
  			for (int j = 1; j < ip; j++) {
  				is += ido;
  				idij = is - 1;
  				int idx1 = j * l1 * ido;
  				for (int i = 2; i < ido; i += 2) {
  					idij += 2;
  					int idx2 = idij + iw1;
  					w1r = wtable_r[idx2 - 1];
  					w1i = wtable_r[idx2];
  					int idx4 = in_off + i;
  					int idx5 = out_off + i;
  					for (int k = 0; k < l1; k++) {
  						int idx3 = k * ido + idx1;
  						int iidx1 = idx4 + idx3;
  						int oidx1 = idx5 + idx3;
  						double o1i = out[oidx1 - 1];
  						double o1r = out[oidx1];
  
  						in[iidx1 - 1] = w1r * o1i - w1i * o1r;
  						in[iidx1] = w1r * o1r + w1i * o1i;
  					}
  				}
  			}
  		} else {
  			is = -ido;
  			for (int j = 1; j < ip; j++) {
  				is += ido;
  				int idx1 = j * l1 * ido;
  				for (int k = 0; k < l1; k++) {
  					idij = is - 1;
  					int idx3 = k * ido + idx1;
  					for (int i = 2; i < ido; i += 2) {
  						idij += 2;
  						int idx2 = idij + iw1;
  						w1r = wtable_r[idx2 - 1];
  						w1i = wtable_r[idx2];
  						int idx4 = in_off + i;
  						int idx5 = out_off + i;
  						int iidx1 = idx4 + idx3;
  						int oidx1 = idx5 + idx3;
  						double o1i = out[oidx1 - 1];
  						double o1r = out[oidx1];
  
  						in[iidx1 - 1] = w1r * o1i - w1i * o1r;
  						in[iidx1] = w1r * o1r + w1i * o1i;
  
  					}
  				}
  			}
  		}
  	}