我在处理这段代码时遇到了一些问题。在 debug 模式下能正常工作,但在 release 模式下会错误地输出一些 csv 行的值为 0.0。只有当我添加了大约在第 19 行附近关闭优化的预处理命令后,一切才开始在 release 模式下正常工作。是否有人对此情况有任何见解?我以前从未遇到过这种行为。
#include <vector>
#include <complex>
#include <fstream>
size_t constexpr kBins = 64;
double constexpr kFrequency = 16.0;
double Triangle(double const bin)
{
return abs(bin - floor(bin + 1.0 / 2.0));
}
int main()
{
std::vector<std::complex<double>> input{kBins, {0.0, 0.0}};
for (size_t i = 0; i < kBins; ++i)
{
#pragma optimize("" off)
double value = sin(2.0 * M_PI * kFrequency * Triangle(static_cast<double>(i) / kBins)) / (2.0 * M_PI * kFrequency * Triangle(static_cast<double>(i) / kBins));
#pragma optimize("" on)
input[i] = fpclassify(value) == FP_NAN ? 1.0 : value;
}
std::ofstream output_file{"output.csv"};
if (output_file.is_open())
{
for (size_t i = 0; i < kBins; ++i)
{
output_file << (static_cast<double>(i) / kBins) << ", " << input[i].real() << ", " << input[i].imag() << std::endl;
}
output_file.close();
}
}
-fsantize=address
等工具是处理那些在发布模式下似乎“消失”的错误时的一个不错的第一步。 - Nate Eldredge