I'm using the awesome Eigen3 library to write a MATLAB MEX file. But I am experiencing some accuracy issues (compared to MATLAB), even when using `long double`.
The most critical computation seems to be the one where I compute a probability according to the normal distribution. 
Here is the code snippet:

```
p.fill( 1/( M_PIl * sigma * sigma ) );
p.array() *= ( - 0.5/pow( sigma, 2.0 ) * ( mu.array() - x.array() ).array().square() ).array().exp();

```

where `x`, `p` and `mu` are `Eigen::Matrix< long double, Dynamic, 1 >`. Usually these vectors have a length of `3000`.

What are possible steps I can take to get the maximum possible precision?
What are the correct GCC compiler flags I can use to force 80 bit precision wherever possible?

P.S: I compile the C++ code (in MATLAB with MEX) with gcc 4.9 and my linux reports the following available instruction sets: Intel MMX, Intel SSE, Intel SSE2, Intel SSE3, Intel SSE4

Edit:
I tried what @Avi Ginsburg suggested below and compiled it using the following command:

```
mex -g -largeArrayDims '-I/usr/include/eigen3' CXXFLAGS='-DEIGEN_DONT_VECTORIZE -std=c++11 -fPIC' test.cpp

```

with `double` and `long double` and each of these options gives me the same error with respect to the solution from MATLAB.