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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 48
#1

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

25.04.2013, 14:11. Просмотров 1364. Ответов 25
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста. Написала функцию округления цифр

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 значение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2013, 14:11     Функция округления чисел
Посмотрите здесь:

Функция округления double - C++
Как в С++ округлить double до int? С помощью какой функции?

Функция округления вещественного числа с заданой точностью - C++
Написать функцию,которая принимает в качестве параметров вещественное число и количество знаков после десятичной точки,которые должны...

Как избежать округления дробных чисел - C++
не виводит дробь а только целие числа. где проблема ? #include &lt;iostream.h&gt; #include &lt;math.h&gt; int mat(double x,double y){ ...

Как избежать округления дробных чисел - C++
как сделать что бы не округляло ??? float t; float z,m; using namespace std; void main(void) { m=-pow(5,2)/2;

Чудеса округления - C++
Не могу посчитать i-ый член по формуле разности Ньютона (см. прикреплённый файл). Из-за округления я не могу получить члены после j...

Метод округления числа - C++
Метод округления числа введонного с клавиатуры. Например вводим 2,5 , а выводит 3 ;

Каковая точность округления? - C++
Какова точность округления у таких функций, как round/ceil/floor? Сколько раз я могу просуммировать число с погрешностью (имеется ввиду,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Сообщений: 48
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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.04.2013, 21:13     Функция округления чисел #24
Eumi, да Вам много чего не помешает в коде перелопатить.
Eumi
5 / 5 / 0
Регистрация: 12.06.2012
Сообщений: 48
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++
Вообщем есть набор чисел. Например: visual studio округляет число типа double - вместо 22995,56 пишет 22995,6. Как заставить её забыть...

Как избавиться от округления - C++
Доброго времени суток. У меня следующая проблема. pp = 0.1534886 + 151.5235 - 0.15668835467; pp имеет тип double, но в качестве...

Ошибка округления - Сумма с синусом - C++
Добрый день! Помогите пожалуйста понять в чем причина. При проверке кода на моем компьютере при вводе числа 1000, выдает корректный...

как избавиться от округления float - C++
#include &lt;iostream&gt; using std:: cin; using std:: cout; using std:: endl; int main() { cout &lt;&lt; &quot;123.008 + 0.0008 = &quot; &lt;&lt;...

Написать программу округления числа - C++
Напишите программу, в которой с помощью round() округляется значение типа double. Для разложения числа на целую и дробную часть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru