Форум программистов, компьютерный форум CyberForum.ru

Функция округления чисел - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 40
25.04.2013, 14:11     Функция округления чисел #1
Здравствуйте, подскажите пожалуйста. Написала функцию округления цифр

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void RoundingFunction(double RoundingVariable, int& ResultVariable)
{
    double IntegerPart=0;
    ResultVariable=0;
    if (modf(abs(RoundingVariable),&IntegerPart)<=0.5)
    {
        if (RoundingVariable>0)
            ResultVariable=floor(RoundingVariable);
        else
            ResultVariable=ceil(RoundingVariable);
    }
    else
    {
        if (RoundingVariable>0)
            ResultVariable=ceil(RoundingVariable);
        else
            ResultVariable=floor(RoundingVariable);
    }
}
И вот мне интересно, возможен ли такой вариант, при вызове функции передать туда элемент динамического массива? Например:

C++
1
RoundingFunction(IndexRho,IndexRhoM[i*column+j]);
Когда компилируешь ошибок нет. Но стоит попытаться использовать массив IndexRhoM, он выдает мне необработанное исключение, при чем ссылается на эту функцию. Подскажите. Можно ли так сделать? Кстати, он выдает мне warning в этой функции так как по сути я присваиваю целому значению double значение.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
25.04.2013, 18:35     Функция округления чисел #21
Цитата Сообщение от Eumi Посмотреть сообщение
Создайте файл с таким массивом.
и так 5*5
а в обращении есть
Цитата Сообщение от Eumi Посмотреть сообщение
y[IndexRhoM[i]*360+IndexThetaN[i]]
т.е может быть и 360 и 720
вот тебе и выход за пределы

я обычно делаю так
расписываю выражения
например
Цитата Сообщение от Eumi Посмотреть сообщение
for (i=0; i<n; i++)
HoughTransformArray[IndexRhoM[i]*360+IndexThetaN[i]]=HoughTransformArray[IndexRhoM[i]*360+IndexThetaN[i]]+Gradient[i];
C++
1
2
3
4
for (i=0; i<n; i++)
{ int ind1=IndexRhoM[i]*360+IndexThetaN[i];
   HoughTransformArray[ind1]=HoughTransformArray[ind1]+Gradient[i];
}
а потом в отладчике слежу за ind1
можно ввести отладочную печать
C++
1
printf("%d",ind1);
тогда понятно какие значения принимает индекс и есть ли выход за пределы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.04.2013, 18:39     Функция округления чисел #22
Вот Ваш проблемный случай:
C++
1
2
3
4
5
for (i=0; i<n; i++)
{
   int index = IndexRhoM[i]*360+IndexThetaN[i]; // Индекс выходит за пределы
   HoughTransformArray[index]=HoughTransformArray[index]+Gradient[i];
}
P.S. ValeryS тоже об этом сказал.
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 40
25.04.2013, 19:20  [ТС]     Функция округления чисел #23
Tulosba, ValeryS,
ясно=) все верно матрица может быть и 320 на 720=) это не страшно. Я, просто в один момент немного поменяла формулу

было:
C++
1
IndexRho=MaxRho-(MaxRho-RhoPolarCoordinate[i*column+j])*(MaxRho-1)/(2*MaxRho);
а стало:
C++
1
IndexRho=2*MaxRho-(MaxRho-RhoPolarCoordinate[i*column+j])*(MaxRho-1)/(2*MaxRho);
но при этом забыла, что количество строк тоже должно увеличиваться в двое. то есть все решает одна строчка
C++
1
2
3
    RoundingFunction(MaxRho,MaxRhoInt);
    MaxRhoInt=2*MaxRhoInt; // вот эта вот=)))
    AlocatePicture(HoughTransformArray, MaxRhoInt, MaxTheta);
Tulosba, ValeryS спасибо вам огромное за помощь. Я просто уже столько с этим кодом вожусь что у меня ум за разум заходит. Без ваших пояснений, не додумалась бы, что дело в пределах. Еще раз спасибо большое. К сожалению репутацию я вам меня пока не могу=) ошибки не выдает, теперь буду возиться, чтобы все это работало правильно=)
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.04.2013, 21:13     Функция округления чисел #24
Eumi, да Вам много чего не помешает в коде перелопатить.
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 40
26.04.2013, 00:25  [ТС]     Функция округления чисел #25
Цитата Сообщение от Tulosba Посмотреть сообщение
Eumi, да Вам много чего не помешает в коде перелопатить.
Например? Hough Transform я только начала делать=) алгоритм еще сырой=) его переделывать и переделывать еще=) а если подскажите что нить по остальной части буду очень благодарна, потому что на мой взгляд новичка, все нормально=) при условии что мне сказали глубоко не лезть=)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 07:56     Функция округления чисел
Еще ссылки по теме:

C++ Как избежать округления дробных чисел
C++ Как избежать округления дробных чисел
Функция округления вещественного числа с заданой точностью C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 07:56     Функция округления чисел #26
Eumi, вся программа написана хоть и на c++, но в стиле обычного c. Имитация двумерности массивов. Выделение/освобождение памяти в куче. Дублирование кода. Да много чего на взгляд новична незаметного
Yandex
Объявления
26.04.2013, 07:56     Функция округления чисел
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru