Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/127: Рейтинг темы: голосов - 127, средняя оценка - 4.68
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
#1

Не могу найти фунцию round в C++

06.12.2011, 00:12. Просмотров 23006. Ответов 20
Метки нет (Все метки)

Здравствуйте, уважаемые программисты. Прочитал в справочнике, что для использования функции round в C++ надо подключить файл math.h. Подключил его, а там нет такой функции, только ceil и floor. И в MSDN ничего не написано. Что делать - как быть? Работаю в VC2008, проект win32. В программировании и среде разбираюсь слабо, спасибо заранее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 00:12
Ответы с готовыми решениями:

Работа с матрицей. Написать фунцию которая заполняет заштрихованную область матрицы нулями
Задали квадратную матрицу, все элементы которой равны единице. написать фунцию...

Round Robin
Эта программа имитирует ли работу процесса по алгоритму круговое планирование?...

Ошибка в компиляторе round myround
Сейчас сидел писал код и в компиляторе мне выбило ошибку на вот этом моменте:...

Реализация алгоритма Round Robin
Здравствуйте, пользователи сайта cyberforum, хотел бы обратиться с вопросом,...

Кроме Round и Floor еще есть что?
Добрый вечер! Есть в с++ еще что-нибудь для округления при вычислениях (не...

20
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:18 #2
http://www.cplusplus.com/reference/clibrary/cmath/floor/
http://www.cplusplus.com/reference/clibrary/cmath/ceil/
1
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 00:27  [ТС] #3
Спасибо, про эти функции мне известно А где же round - ее нет в списке. В справочнике написано, что она добавлена в версии языка С99. А у меня С++2008 - более поздняя версия. Выходит - свою функцию писать надо?
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:35 #4
похоже, что так
с != с++. совместимость есть до определенного момента. с помощью modf не особо сложно будет самоделку написать.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
06.12.2011, 00:49 #5
C++
1
2
3
4
int round (double value)
{
   return (int) floor(value + 0.5);
}
дело нехитрое
3
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:51 #6
хитрое. не учли знак value.
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
06.12.2011, 00:55 #7
DU, например?
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:04 #8
-4.6 должно округлится до -5. так? ок.
floor(-4.6 + 0,5) == floor(-4.1) == -4.
floor(-4.1 + 0,5) == floor(-3.6) == -3. а не -4 как ожидалось.

Что-то я кажись наглючил.

Точно наглючил. floor(value + 0.5); возаращает то, что надо.
0
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 01:21  [ТС] #9
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
int round (double value)
{
   return (int) floor(value + 0.5);
}
дело нехитрое
Спасибо, еще подскажите, пожалуйста, почему мне пишется ошибка "Error 1 error C3861: 'round': identifier not found" при вызове этой функции?

Я так написал(нужен округленный double):

C++
1
2
3
4
5
6
// начало функция округления
double round(double double_value)
{
   return floor(double_value+0.5);
}
// конец функция округления
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
06.12.2011, 01:22 #10
больше кода напишите
где вызываете
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:23 #11
наверно используете ф-ию до ее определения. весь код покажите.
0
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 01:37  [ТС] #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
больше кода напишите
где вызываете
Пожалуйста:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// shift.cpp : Defines the exported functions for the DLL application.
#include "stdafx.h"
#include "math.h"
#define DLL extern "C" __declspec(dllexport)
// начало главной функции
DLL int __stdcall Shift(double * src, double * dest, int nPoints, int nShift)
{
    for(int i = 0; i < nPoints; i++)
    {
        dest[i]=round(src[i]);
    }
    return 0;
}
// конец главной функции----
//++++++++++++++++++++++++++
// начало функция округления
double round(double double_value)
{
    return floor(double_value+0.5);
}
// конец функция округления
//+++++++++++++++++++++++++
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:43 #13
Перед ф-ией Shift поместите объявление вашей ф-ии

double round(double double_value);

или же сразу целиком
1
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 02:01  [ТС] #14
Цитата Сообщение от DU Посмотреть сообщение
Перед ф-ией Shift поместите объявление вашей ф-ии

double round(double double_value);

или же сразу целиком
Спасибо, мир не без добрых людей
0
mdt::Vladimir
8 / 8 / 1
Регистрация: 23.09.2011
Сообщений: 32
05.03.2012, 18:38 #15
Хоть си != си++, но в GCC почему-то функция round есть, код, содержащий round прекрасно компилируется и в Linux и во FreeBSD. Но тоже столкнулся с такой проблемой, когда решил этот код откомпилировать под Windows на Visual Studio.
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.03.2012, 18:49 #16
mdt::Vladimir, У всех компиляторов есть нестандартные расширения
0
temak
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 4
03.06.2012, 17:16 #17
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
int round (double value)
{
   return (int) floor(value + 0.5);
}
дело нехитрое
Nут и правда не всё учтено. Например
round( -1.5) = floor( -1,5 + 0.5 ) = -1 . А должно быть -2 !!!
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
03.06.2012, 17:32 #18
округляется до большего, а не до меньшего
0
temak
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 4
04.06.2012, 00:40 #19
Цитата Сообщение от alex_x_x Посмотреть сообщение
округляется до большего, а не до меньшего

Округление к ближайшему целому
(англ. rounding) — наиболее часто используемое округление. Число в десятичной системе округляют до N-ого знака в зависимости от N+1 знака:

если N+1 знак < 5, то N-ый знак сохраняют, а N+1 и все последующие обнуляют;
если N+1 знак ≥ 5, то N-ый знак увеличивают на единицу, а N+1 и все последующие обнуляют.

Например: 11,9 → 12; −0,9 → −1; −1,1 → −1; 2,5 → 3.

http://ru.wikipedia.org/wiki/Округление
0
easybudda
Модератор
Эксперт CЭксперт С++
10055 / 5975 / 1493
Регистрация: 25.07.2009
Сообщений: 11,323
04.06.2012, 00:55 #20
Цитата Сообщение от ForEveR Посмотреть сообщение
У всех компиляторов есть нестандартные расширения
Ну тогда весь стандарт ANSI C 99 - одно большое нестандартное решение от gcc

Цитата Сообщение от mdt::Vladimir Посмотреть сообщение
Но тоже столкнулся с такой проблемой, когда решил этот код откомпилировать под Windows на Visual Studio.
Мелкомягкие поддержку С99 так и не удосужились сделать, вместо этого своих нелепых велосипедов насочиняли.
0
04.06.2012, 00:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 00:55

компилятор находит неоднозначность при вызове round(i)
Доброго времени суток! Подскажите, компилятор находит неодназначтность в...

Функция round(), округление числа до 4-х знаков после запятой
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой?...

Алгоритм планирования Round Robin с квантом времени (переделать программу)
Если кто знаком с этим - подскажите, будьте любезны!!)) Друзья, есть код...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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