docs: void radf4(final int ido, final int l1, final double in[], final int in_off, final double out[], final int out_off, final int offset) {
  		final double hsqt2 = 0.707106781186547572737310929369414225;
  		int i, ic;
  		double ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4, w1r, w1i, w2r, w2i, w3r, w3i;
  		int iw1, iw2, iw3;
  		iw1 = offset;
  		iw2 = offset + ido;
  		iw3 = iw2 + ido;
  		int idx0 = l1 * ido;
  		for (int k = 0; k < l1; k++) {
  			int idx1 = k * ido;
  			int idx2 = 4 * idx1;
  			int idx3 = idx1 + idx0;
  			int idx4 = idx3 + idx0;
  			int idx5 = idx4 + idx0;
  			int idx6 = idx2 + ido;
  			double i1r = in[in_off + idx1];
  			double i2r = in[in_off + idx3];
  			double i3r = in[in_off + idx4];
  			double i4r = in[in_off + idx5];
  
  			tr1 = i2r + i4r;
  			tr2 = i1r + i3r;
  
  			int oidx1 = out_off + idx2;
  			int oidx2 = out_off + idx6 + ido;
  
  			out[oidx1] = tr1 + tr2;
  			out[oidx2 - 1 + ido + ido] = tr2 - tr1;
  			out[oidx2 - 1] = i1r - i3r;
  			out[oidx2] = i4r - i2r;
  		}
  		if (ido < 2)
  			return;
  		if (ido != 2) {
  			for (int k = 0; k < l1; k++) {
  				int idx1 = k * ido;
  				int idx2 = idx1 + idx0;
  				int idx3 = idx2 + idx0;
  				int idx4 = idx3 + idx0;
  				int idx5 = 4 * idx1;
  				int idx6 = idx5 + ido;
  				int idx7 = idx6 + ido;
  				int idx8 = idx7 + ido;
  				for (i = 2; i < ido; i += 2) {
  					ic = ido - i;
  					int widx1 = i - 1 + iw1;
  					int widx2 = i - 1 + iw2;
  					int widx3 = i - 1 + iw3;
  					w1r = wtable_r[widx1 - 1];
  					w1i = wtable_r[widx1];
  					w2r = wtable_r[widx2 - 1];
  					w2i = wtable_r[widx2];
  					w3r = wtable_r[widx3 - 1];
  					w3i = wtable_r[widx3];
  
  					int idx9 = in_off + i;
  					int idx10 = out_off + i;
  					int idx11 = out_off + ic;
  					int iidx1 = idx9 + idx1;
  					int iidx2 = idx9 + idx2;
  					int iidx3 = idx9 + idx3;
  					int iidx4 = idx9 + idx4;
  
  					double i1i = in[iidx1 - 1];
  					double i1r = in[iidx1];
  					double i2i = in[iidx2 - 1];
  					double i2r = in[iidx2];
  					double i3i = in[iidx3 - 1];
  					double i3r = in[iidx3];
  					double i4i = in[iidx4 - 1];
  					double i4r = in[iidx4];
  
  					cr2 = w1r * i2i + w1i * i2r;
  					ci2 = w1r * i2r - w1i * i2i;
  					cr3 = w2r * i3i + w2i * i3r;
  					ci3 = w2r * i3r - w2i * i3i;
  					cr4 = w3r * i4i + w3i * i4r;
  					ci4 = w3r * i4r - w3i * i4i;
  					tr1 = cr2 + cr4;
  					tr4 = cr4 - cr2;
  					ti1 = ci2 + ci4;
  					ti4 = ci2 - ci4;
  					ti2 = i1r + ci3;
  					ti3 = i1r - ci3;
  					tr2 = i1i + cr3;
  					tr3 = i1i - cr3;
  
  					int oidx1 = idx10 + idx5;
  					int oidx2 = idx11 + idx6;
  					int oidx3 = idx10 + idx7;
  					int oidx4 = idx11 + idx8;
  
  					out[oidx1 - 1] = tr1 + tr2;
  					out[oidx4 - 1] = tr2 - tr1;
  					out[oidx1] = ti1 + ti2;
  					out[oidx4] = ti1 - ti2;
  					out[oidx3 - 1] = ti4 + tr3;
  					out[oidx2 - 1] = tr3 - ti4;
  					out[oidx3] = tr4 + ti3;
  					out[oidx2] = tr4 - ti3;
  				}
  			}
  			if (ido % 2 == 1)
  				return;
  		}
  		for (int k = 0; k < l1; k++) {
  			int idx1 = k * ido;
  			int idx2 = 4 * idx1;
  			int idx3 = idx1 + idx0;
  			int idx4 = idx3 + idx0;
  			int idx5 = idx4 + idx0;
  			int idx6 = idx2 + ido;
  			int idx7 = idx6 + ido;
  			int idx8 = idx7 + ido;
  			int idx9 = in_off + ido;
  			int idx10 = out_off + ido;
  
  			double i1i = in[idx9 - 1 + idx1];
  			double i2i = in[idx9 - 1 + idx3];
  			double i3i = in[idx9 - 1 + idx4];
  			double i4i = in[idx9 - 1 + idx5];
  
  			ti1 = -hsqt2 * (i2i + i4i);
  			tr1 = hsqt2 * (i2i - i4i);
  
  			out[idx10 - 1 + idx2] = tr1 + i1i;
  			out[idx10 - 1 + idx7] = i1i - tr1;
  			out[out_off + idx6] = ti1 - i3i;
  			out[out_off + idx8] = ti1 + i3i;
  		}
  	}