[Rd] stats::fft produces inconsistent results

Dipterix Wang d|pter|x@w@ng @end|ng |rom gm@||@com
Wed Oct 20 01:06:04 CEST 2021

Dear R-devel Team,

I'm developing a neuroscience signal pipeline package in R (https://github.com/dipterix/ravetools) and I noticed a weird issue that failed my unit test.

Basically I was trying to use `fftw3` library to implement fast multivariate fft function in C++. When I tried to compare my results with stats::fft, the test result showed the first element of **expected** (which was produced by stats::fft) was zero, which, I am pretty sure, is wrong, and I can confirm that my function produces correct results.

However, somehow I couldn’t reproduce this issue on my personal computer (osx, M1, R4.1.1), the error simply went away. 

The catch is my function produced consistent and correct results but stats::fft was not. This does not mean `stats::fft` has bugs. Instead, I suspect there could be some weird interactions between my code and stats::fft at C/C++ level, but I couldn’t figure it out why.

+++ Details:

Here’s the code I used for the test:


————————Test code————————
x <- rnorm(1000)
dim(x) <- c(100,10)
a <- ravetools:::mvfftw_r2c(x, 0)
c <- apply(x, 2, stats::fft)[1:51,]
expect_equal(a, c)

Here are the tests that gave me the errors:

The test logs on win-builder

Test logs on GitHub

—————————————— Failed tests ——————————————
 -- Failure (test-fftw.R:41:3): mvfftw_r2c --------------------------------------
 `a` (`actual`) not equal to `c` (`expected`).

 actual vs expected
                                     [,1]                    [,2]                  [,3]                  [,4]                    ...
 - actual[1, ]     10.8887367+ 0.0000000i  -3.7808077+ 0.0000000i   2.967354+ 0.000000i   5.160186+ 0.000000i ...
 + expected[1, ]    0.0000000+ 0.0000000i  -3.7808077+ 0.0000000i   2.967354+ 0.000000i   5.160186+ 0.000000i...


The first columns are different, `actual` is the results I produced via `ravetools:::mvfftw_r2c`, and `expected` was produced by `stats::fft`

Any help or attention is very much appreciated.
- Zhengjia

More information about the R-devel mailing list