2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение08.11.2005, 14:19 
Да, но просто изначально предполагается оценить мин-макс, а потом, если нужно и сумму. А тут все сразу. Нет поиска мин-макс, просто определение суммы, если сумма равна нулю, то значит, ничего не меняли и, соответственно, мин-макс лежат в заданном дипазоне. Просто оптимизация кода.

 
 
 
 
Сообщение09.11.2005, 22:50 
Аватара пользователя
:evil:

VLarin писал(а):
To Sanyok:
Код:
...
a = compare((double **)matr, a, b, WIDTH, HEIGHT);
    if (a == 0)
        puts("Минимум и максимум принадлежат заданному отрезку.");
    else if
...



Сие не совсем верно. Если (a == 0), то сумма всего лишь не изменилась, то есть либо выездов за границу не было, либо они были скомпенсированы. Коли уж мы о double говорим, то здесь == и вовсе не уместно, и если нужно больше/меньше считать, то лучше отдельно...

 
 
 
 
Сообщение10.11.2005, 15:15 
Виноват, не подумал.
Тогда так:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
...

bool compare(double **matr, double a, double b, int width, int height, double& sum)
{
    bool res = false;
    sum = 0;
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            if (matr[i][j] < a)
            {
                res = true;
                sum -= matr[i][j] - a;
            }
            else if (matr[i][j] > b)
            {
                res = true;
                sum += matr[i][j] - b;
            }
       }
    }
    return res;
}

...

double sum = 0;
if (compare((double **)matr, a, b, WIDTH, HEIGHT, sum))
{
    if (sum == 0)
        puts("Сумма не изменилась");
    else if (sum < 0)
        puts("Сумма стала меньше.");
    else
        puts("Сумма стала больше.");
}
...
}


А сравнение double с нулем вещь уместная, если мы сначала приравняли нулю, а потом проверяем. Нехорошо два double сравнивать, тут нужно использовать DBL_EPS (ну или FLT_EPS для float) - типа (a1 == a2) ---> fabs(a1 - a2)/max(fabs(a1), fabs(a2)) < DBL_EPS.

 
 
 [ Сообщений: 18 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group