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

Что за функция fabs(int)? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.64
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 19:44     Что за функция fabs(int)? #1
Что за функция fabs(int)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 19:44     Что за функция fabs(int)?
Посмотрите здесь:

C++ Что означает эта строка? int _tmain(int argc, _TCHAR* argv[])
Функция int isdigit(int С) C++
C++ int main () { int a=3,b=2,c; c=a+b; cout << "c=" << c; } Что не правильно?
C++ Функция fabs!
C++ int[][] или int[] - что быстрее?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.04.2013, 19:48     Что за функция fabs(int)? #2
Цитата Сообщение от taras atavin Посмотреть сообщение
Что за функция fabs(int)?
модуль вещественных чисел возвращает
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
12.04.2013, 19:51     Что за функция fabs(int)? #3
Функция fabs (Floating-point ABSolute value), объявленная в заголовочном файле <cmath> или <math.h> принимает вещественный аргумент (не int, а float, double или long double) и возвращает его абсолютное значение (модуль). Легко находится в документации по стандартным функциям C или C++.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 19:57  [ТС]     Что за функция fabs(int)? #4
Цитата Сообщение от abit Посмотреть сообщение
модуль вещественных чисел возвращает
А почему в тексте EZFONT у неё целый фактический параметр?
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
12.04.2013, 20:02     Что за функция fabs(int)? #5
C++11
26.8.11:
Moreover, there shall be additional overloads sufficient to ensure:
1. If any argument corresponding to a double parameter has type long double, then all arguments corresponding to double parameters are effectively cast to long double.
2. Otherwise, if any argument corresponding to a double parameter has type double or an integer type, then all arguments corresponding to double parameters are effectively cast to double.
3. Otherwise, all arguments corresponding to double parameters are effectively cast to float.
Как я понимаю, в соответствии с этим должен существовать fabs(int).
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
12.04.2013, 20:08     Что за функция fabs(int)? #6
C++
1
2
3
4
5
6
7
8
void foo(float x)
{}
 
int main()
{
    const int y = 42;
    foo(y);  // неявное преобразование целочисленной константы к типу float
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
12.04.2013, 20:16     Что за функция fabs(int)? #7
Но в пункте 26.8.9 сказано, что к сишной fabs(double) добавляются ещё fabs(float) и fabs(long double), так что тут с int'ом была бы неоднозначность, если не добавить fabs(int).
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
12.04.2013, 20:26     Что за функция fabs(int)? #8
Получается, что придётся тогда добавлять перегрузки и для всех остальных целочисленных типов. Посмотрел реализацию в gcc - никаких "лишних" перегрузок помимо того, что указано стандартом, и в то же время неоднозначности не возникает, для неявного преобразования выбирается тип double, в полном соответствии с пунктом 2 вышеприведённого текста.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
12.04.2013, 20:26     Что за функция fabs(int)? #9
Цитата Сообщение от Somebody Посмотреть сообщение
Но в пункте 26.8.9 сказано, что к сишной fabs(double) добавляются ещё fabs(float) и fabs(long double), так что тут с int'ом была бы неоднозначность, если не добавить fabs(int).
в чём заключается неоднозначность? что при int не известно к чему неявно преобразовывать?

тут - http://www.cplusplus.com/reference/cmath/fabs/

чётко сказанно

In C++, abs is also declared in this header with the same behavior.
Я это понимаю, что в C++ сделали fabs(int) = abs(int)

далее если почитаете, ниже

In C, only the double version of this function exists with this name.
это значит, что в чистом Си она всегда к double переводилась


никаких неоднозначностей...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 21:00     Что за функция fabs(int)?
Еще ссылки по теме:

C++ Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
Что и почему дописать в int main() чтобы функция void вернула значение C++
C++ Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec

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

Или воспользуйтесь поиском по форуму:
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
12.04.2013, 21:00     Что за функция fabs(int)? #10
Цитата Сообщение от abit Посмотреть сообщение
это значит, что в чистом Си она всегда к double переводилась
Исторически в C была только double fabs(double). Это было давно. В C99 добавили float fabsf(float x) и long double fabsl(long double x). И ещё добавили хедер tgmath.h, при подключении которого implementation-defined способом получалось три fabs'а (с одинаковым именем!) - для float, double и long double. В C11 добавили generic selection expression, с помощью которого можно самому такую "перегрузку" устроить. А в C++11 просто делают совместимость с C, только вот проблема: у _Generic() есть default, а у плюсовой перегрузки нет.
Yandex
Объявления
12.04.2013, 21:00     Что за функция fabs(int)?
Ответ Создать тему
Опции темы

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