вместо
void scale_by_median(float swide[], int* iz)
{
if(swide[0] > 1E29) return;
std::vector<float> buf (swide, swide + *iz);
std::sort(buf.begin(), buf.end());
auto smedian=buf[*iz/2];
if(smedian <= 0.0) return;// if(smedian < 1.0) smedian=1.0;
// for (int i=0; i<*iz; ++i) swide[i] /= smedian;
if(smedian > 1.0) for (int i=0; i<*iz; ++i) swide[i] /= smedian; else for (int i=0; i<*iz; ++i) swide[i] *= smedian;
}
сделайте так:
void scale_by_median(float swide[], int* iz)
{
if(swide[0] > 1E29) return;
std::vector<float> buf (swide, swide + *iz);
std::sort(buf.begin(), buf.end());
auto smedian=buf[*iz/2];
if(smedian <= 0.0) return;// if(smedian < 1.0) smedian=1.0;
for (int i=0; i<*iz; ++i) swide[i] /= smedian;
// if(smedian > 1.0) for (int i=0; i<*iz; ++i) swide[i] /= smedian; else for (int i=0; i<*iz; ++i) swide[i] *= smedian;
}