2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 
Сообщение08.11.2005, 14:19 


13/09/05
153
Москва
Да, но просто изначально предполагается оценить мин-макс, а потом, если нужно и сумму. А тут все сразу. Нет поиска мин-макс, просто определение суммы, если сумма равна нулю, то значит, ничего не меняли и, соответственно, мин-макс лежат в заданном дипазоне. Просто оптимизация кода.

 Профиль  
                  
 
 
Сообщение09.11.2005, 22:50 
Заслуженный участник
Аватара пользователя


17/10/05
3709
: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 


13/09/05
153
Москва
Виноват, не подумал.
Тогда так:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group