Skip to main content
1 of 2
Toby Speight
  • 81.9k
  • 14
  • 101
  • 309

#Use what C++ provides If you use the C++ versions of the headers:

#include <cstdlib>
#include <cstdio> // or better, <iostream>
#include <cstring>

You'll get the names safely in the std namespace. I see you include <cmath> but assume its names are exported to the global namespace - that's an error. You can't depend on that happening (it's just an artefact of your implementation).

Also, prefer new/delete and new[]/delete[] over malloc()/free(). You might be able to avoid memory management completely by using the standard containers; that's a Good Thing.

std::max() and std::min() are safer choices compared to your maxd() and mind() macros.

#Avoid I/O in parallel code These prints may get interleaved in unpredictable ways:

#pragma omp parallel for
for (int i = 0; i < cur_root; i += 2)
  {
    fprintf (temp, "%lf %lf %lf\n",
             roots[i], roots[i+1],
             calculateDensityScalarFromDensity(min, max, densities[i / 2])); 
  }

You might do something like

#pragma omp parallel for
for (int i = 0; i < cur_root; i += 2)
  {
    auto density = calculateDensityScalarFromDensity(min, max, densities[i / 2])
#pragma omp critical
    fprintf (temp, "%lf %lf %lf\n",
             roots[i], roots[i+1],
             density); 
  }
Toby Speight
  • 81.9k
  • 14
  • 101
  • 309