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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 149, средняя оценка - 4.81
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 00:12     Не могу найти фунцию round в C++ #1
Здравствуйте, уважаемые программисты. Прочитал в справочнике, что для использования функции round в C++ надо подключить файл math.h. Подключил его, а там нет такой функции, только ceil и floor. И в MSDN ничего не написано. Что делать - как быть? Работаю в VC2008, проект win32. В программировании и среде разбираюсь слабо, спасибо заранее.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:18     Не могу найти фунцию round в C++ #2
http://www.cplusplus.com/reference/c...y/cmath/floor/
http://www.cplusplus.com/reference/clibrary/cmath/ceil/
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 00:27  [ТС]     Не могу найти фунцию round в C++ #3
Спасибо, про эти функции мне известно А где же round - ее нет в списке. В справочнике написано, что она добавлена в версии языка С99. А у меня С++2008 - более поздняя версия. Выходит - свою функцию писать надо?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:35     Не могу найти фунцию round в C++ #4
похоже, что так
с != с++. совместимость есть до определенного момента. с помощью modf не особо сложно будет самоделку написать.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.12.2011, 00:49     Не могу найти фунцию round в C++ #5
C++
1
2
3
4
int round (double value)
{
   return (int) floor(value + 0.5);
}
дело нехитрое
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 00:51     Не могу найти фунцию round в C++ #6
хитрое. не учли знак value.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.12.2011, 00:55     Не могу найти фунцию round в C++ #7
DU, например?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:04     Не могу найти фунцию round в C++ #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); возаращает то, что надо.
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 01:21  [ТС]     Не могу найти фунцию round в C++ #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);
}
// конец функция округления
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.12.2011, 01:22     Не могу найти фунцию round в C++ #10
больше кода напишите
где вызываете
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:23     Не могу найти фунцию round в C++ #11
наверно используете ф-ию до ее определения. весь код покажите.
vb_lord
2 / 2 / 0
Регистрация: 06.12.2011
Сообщений: 33
06.12.2011, 01:37  [ТС]     Не могу найти фунцию round в C++ #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);
}
// конец функция округления
//+++++++++++++++++++++++++
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.12.2011, 01:43     Не могу найти фунцию round в C++ #13
Перед ф-ией Shift поместите объявление вашей ф-ии

double round(double double_value);

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

double round(double double_value);

или же сразу целиком
Спасибо, мир не без добрых людей
mdt::Vladimir
7 / 7 / 0
Регистрация: 23.09.2011
Сообщений: 32
05.03.2012, 18:38     Не могу найти фунцию round в C++ #15
Хоть си != си++, но в GCC почему-то функция round есть, код, содержащий round прекрасно компилируется и в Linux и во FreeBSD. Но тоже столкнулся с такой проблемой, когда решил этот код откомпилировать под Windows на Visual Studio.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2012, 18:49     Не могу найти фунцию round в C++ #16
mdt::Vladimir, У всех компиляторов есть нестандартные расширения
temak
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 4
03.06.2012, 17:16     Не могу найти фунцию round в C++ #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 !!!
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
03.06.2012, 17:32     Не могу найти фунцию round в C++ #18
округляется до большего, а не до меньшего
temak
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 4
04.06.2012, 00:40     Не могу найти фунцию round в C++ #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/Округление
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 00:55     Не могу найти фунцию round в C++
Еще ссылки по теме:

компилятор находит неоднозначность при вызове round(i) C++
Ошибка в компиляторе round myround C++
C++ Кроме Round и Floor еще есть что?

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2012, 00:55     Не могу найти фунцию round в C++ #20
Цитата Сообщение от ForEveR Посмотреть сообщение
У всех компиляторов есть нестандартные расширения
Ну тогда весь стандарт ANSI C 99 - одно большое нестандартное решение от gcc

Цитата Сообщение от mdt::Vladimir Посмотреть сообщение
Но тоже столкнулся с такой проблемой, когда решил этот код откомпилировать под Windows на Visual Studio.
Мелкомягкие поддержку С99 так и не удосужились сделать, вместо этого своих нелепых велосипедов насочиняли.
Yandex
Объявления
04.06.2012, 00:55     Не могу найти фунцию round в C++
Ответ Создать тему
Опции темы

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