Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.64
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

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

12.04.2013, 19:44. Просмотров 5470. Ответов 9
Метки нет (Все метки)

Что за функция fabs(int)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 19:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за функция fabs(int)? (C++):

Функция fabs! - C++
Здравствуйте, объясните пожалуйста, как можно проще, что из себя представляет ф-ция fabs! Если можно, то с элементарными примерами...

Что и почему дописать в int main() чтобы функция void вернула значение - C++
Что и почему дописать в int main() чтобы функция void вернула значение? #include <stdio.h> #include <math.h> #include <iostream.h>...

Что означает эта строка? int _tmain(int argc, _TCHAR* argv[]) - C++
Всем привет, до этого пользовался DEV, решил пересесть на Visual Studio 2010 Express C++. С++ еще не изучал, хочу сначала добить "С". ...

Что это такое int (*func4 (void)(int) - C++
Это примеры указателей на функцию. Понятно.void (*func1) (void *, int *); void (*func2) (int, int *); void (*func3) (void); А это что...

Что означает int pos = 0; int value = 5; в данном коде? - C++
#include<conio.h> #include<stdio.h> #include<math.h> void mass(int y); void main() { int y;

Функция int isdigit(int С) - C++
Чот мучился с ней так и не сообразил как организовать решение задачи: с бинарного файла считываются цифры и латинские буквы, а после буквы...

9
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 757
12.04.2013, 19:48 #2
Цитата Сообщение от taras atavin Посмотреть сообщение
Что за функция fabs(int)?
модуль вещественных чисел возвращает
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.04.2013, 19:51 #3
Функция fabs (Floating-point ABSolute value), объявленная в заголовочном файле <cmath> или <math.h> принимает вещественный аргумент (не int, а float, double или long double) и возвращает его абсолютное значение (модуль). Легко находится в документации по стандартным функциям C или C++.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 19:57  [ТС] #4
Цитата Сообщение от abit Посмотреть сообщение
модуль вещественных чисел возвращает
А почему в тексте EZFONT у неё целый фактический параметр?
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
12.04.2013, 20:02 #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).
1
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.04.2013, 20:08 #6
C++
1
2
3
4
5
6
7
8
void foo(float x)
{}
 
int main()
{
    const int y = 42;
    foo(y);  // неявное преобразование целочисленной константы к типу float
}
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
12.04.2013, 20:16 #7
Но в пункте 26.8.9 сказано, что к сишной fabs(double) добавляются ещё fabs(float) и fabs(long double), так что тут с int'ом была бы неоднозначность, если не добавить fabs(int).
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
12.04.2013, 20:26 #8
Получается, что придётся тогда добавлять перегрузки и для всех остальных целочисленных типов. Посмотрел реализацию в gcc - никаких "лишних" перегрузок помимо того, что указано стандартом, и в то же время неоднозначности не возникает, для неявного преобразования выбирается тип double, в полном соответствии с пунктом 2 вышеприведённого текста.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 757
12.04.2013, 20:26 #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 переводилась


никаких неоднозначностей...
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
12.04.2013, 21:00 #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, а у плюсовой перегрузки нет.
0
12.04.2013, 21:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 21:00
Привет! Вот еще темы с ответами:

int[][] или int[] - что быстрее? - C++
Везде вижу, что лучше использовать одномернный массив, а не двумерный. Всегда принимал это на правду, но сейчас задумался. Нужели умножение...

Объясните что делает int z(int a) - C++
вот весь исходный код #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cmath&gt; using namespace std; int z(int a) { int x, y,...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

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


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

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

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