docs: public void complexInverse(final float[] a, final boolean scale) {
  		// handle special case
  		if( rows == 1 || columns == 1 ) {
  			if( rows > 1 )
  				fftRows.complexInverse(a, scale);
  			else
  				fftColumns.complexInverse(a, scale);
  			return;
  		}
  
  		if (isPowerOfTwo) {
  			int oldn2 = columns;
  			columns = 2 * columns;
  			for (int r = 0; r < rows; r++) {
  				fftColumns.complexInverse(a, r * columns, scale);
  			}
  			cdft2d_sub(1, a, scale);
  			columns = oldn2;
  		} else {
  			final int rowspan = 2 * columns;
  			for (int r = 0; r < rows; r++) {
  				fftColumns.complexInverse(a, r * rowspan, scale);
  			}
  
  			for (int c = 0; c < columns; c++) {
  				int idx1 = 2 * c;
  				for (int r = 0; r < rows; r++) {
  					int idx2 = 2 * r;
  					int idx3 = r * rowspan + idx1;
  					temp[idx2] = a[idx3];
  					temp[idx2 + 1] = a[idx3 + 1];
  				}
  				fftRows.complexInverse(temp, scale);
  				for (int r = 0; r < rows; r++) {
  					int idx2 = 2 * r;
  					int idx3 = r * rowspan + idx1;
  					a[idx3] = temp[idx2];
  					a[idx3 + 1] = temp[idx2 + 1];
  				}
  			}
  		}
  	}