функция min c какая библиотека
MIN and MAX in C
Where are MIN and MAX defined in C, if at all?
What is the best way to implement these, as generically and type safely as possible? (Compiler extensions/builtins for mainstream compilers preferred.)
15 Answers 15
Where are MIN and MAX defined in C, if at all?
What is the best way to implement these, as generically and type safe as possible (compiler extensions/builtins for mainstream compilers preferred).
Everyone says «oh I know about double evaluation, it’s no problem» and a few months down the road, you’ll be debugging the silliest problems for hours on end.
Note the use of __typeof__ instead of typeof :
The source repositories are here:
There’s a std::min and std::max in C++, but AFAIK, there’s no equivalent in the C standard library. You can define them yourself with macros like
Avoid non-standard compiler extensions and implement it as a completely type-safe macro in pure standard C (ISO 9899:2011).
Solution
Usage
Explanation
The macro MAX creates another macro based on the type parameter. This control macro, if implemented for the given type, is used to check that both parameters are of the correct type. If the type is not supported, there will be a compiler error.
If either x or y is not of the correct type, there will be a compiler error in the ENSURE_ macros. More such macros can be added if more types are supported. I’ve assumed that only arithmetic types (integers, floats, pointers etc) will be used and not structs or arrays etc.
If all types are correct, the GENERIC_MAX macro will be called. Extra parenthesis are needed around each macro parameter, as the usual standard precaution when writing C macros.
Rationale
A macro with just one parameter could have been written in a much simpler way. But with 2 or more parameters, there is a need to include an extra type parameter. Because something like this is unfortunately impossible:
To solve this, I created the macro name during the pre-processor phase instead, with the ## operator, so that no macro gets accidentally expanded.
BadproG.com
Navigation
Main menu
Lighting is certainly one of the most interesting effect that we can make with OpenGL.
Combined with colors and normal vectors, lighting becomes visually realistic.
This time we are going to make our first Hello world OpenCV project.
OpenCV is an interesting library aimed to computer vision.
But before playing with it, it’s necessary to set up your IDE.
This IDE will be Visual Studio for this tutorial.
So let’s get started.
In the past tutorials about Qt and OpenGL we saw how to deal with some basic tasks.
Let’s see this time something a bit more advanced with the QOpenGLWidget class in order to display a scene from a window with a shape.
Playing with colors can be fun but what about textures?
What about something really realistic?
In this OpenGL tutorial for Qt we are going to apply a texture on our dear triangles.
As we saw, in the last tutorial about using a VAO and VBO to handle 2 different objects on the scene with OpenGL, it’s possible to have 2 arrays of vertex: one to manage the position and one to deal with the color.
VAO (Vertex Array Object) and VBO (Vertex Buffer Object) were introduced to help programmers since OpenGL 3.0.
So it’s not a recent features but if you just started learning OpenGL it could be very complex to understand.
With Android we haven’t a classic ComboBox like in other frameworks but we have instead a Spinner.
Actually it’s exactly the same and only the name differs.
PySide2 is a Python API for the Qt framework.
This API is made with Shiboken2, the Python binding generator.
It means that you can write your code in Python and use the Qt framework as you’d do with C++.
You have a C++ std::vector and you want to convert it to a Boost.Python Numpy ndarray.
But, once the ndarray got, you want to get back to the C++ array.
Функция минимума
Условие
Вычислите значение z=min(a,3b)⋅min(2a−b,2b), где min(x,y) — минимальное из чисел x и y. Задачу требуется решить, определив и использовав функцию min.
Формат входных данных
Даны числа a и b (−32000≤a,b≤32000).
Формат выходных данных
Требуется вывести на экран число z.
входные данные
3 2
выходные данные
12
Функция минимума
Вычислите значение z=min(a,3b)⋅min(2a−b,2b), где min(x,y) — минимальное из чисел x и y. Задачу.
Функция минимума
Добрый день! Помогите найти ошибку, пожалуйста. Задание: Вычислите значение.
Функция нахождения минимума
Подскажите, где ошибка и почему программа не компилит то, что необходимо найти. #include.
Можно ли как-то это решить?
Решение
Поиск минимума с рекурсией
Описать функцию min(x) для определения минимального элемента массива X, введя вспомогательную.
Нахождение минимума k в матрице
подскажите пожалуйста какой код будет для нахождения минимума k в матрице
Вычисление минимума/максимума
Даны действительные числа Х,У,Z.Вычислить 1)max (x+y+z;xyz) 2)min (x+y+z/2;чня)+1
Использование функций min и max в С++
Как правило, вы используете один из этих наборов функций или предпочитаете писать свои собственные (возможно, для повышения эффективности, мобильности, гибкости и т.д.)?
Примечания:
Стандартная библиотека шаблонов С++ (STL) объявляет функции min и max в стандартном С++ algorithm заголовок.
В стандарте C (C99) предусмотрена функция fmin и fmax в стандартном заголовке C math.h.
Если другие версии быстрее, ваша реализация может добавить к ним перегрузки, и вы получите преимущество производительности и переносимости:
fmin и fmax специально предназначены для использования с числами с плавающей запятой (отсюда и «f» ). Если вы используете его для ints, вы можете потерять производительность или прецизионные потери из-за конверсии, накладных расходов функций и т.д. В зависимости от вашего компилятора/платформы.
Это безопаснее, поскольку вы должны явно преобразовывать аргументы, чтобы они соответствовали друг другу, когда у них разные типы. Компилятор не позволит вам случайно преобразовать 64-битный int в 64-битный float, например. Только эта причина должна сделать шаблоны вашим выбором по умолчанию. (Кредит Matthieu M и bk1e)
Даже при использовании с поплавками шаблон может выигрывать в производительности. У компилятора всегда есть возможность встраивания вызовов в функции шаблона, поскольку исходный код является частью блока компиляции. Иногда невозможно встроить вызов библиотечной функции, с другой стороны (разделяемые библиотеки, отсутствие оптимизации времени соединения и т.д.).
Использование функций min и max в C++
Вы склонны использовать один из этих наборов функций или предпочитаете писать свои собственные (возможно, для повышения эффективности, переносимости, гибкости и т. д.)?
Записи :
Стандартная библиотека шаблонов C++ (STL) объявляет функции min и max в заголовке стандартного алгоритма C++.
Стандарт C (C99) предоставляет функции fmin и fmax в стандартном заголовке C math.h.
14 ответов
Я хочу написать программу C, которая принимает пользовательский ввод и сравнивает предыдущие значения для минимальных и максимальных значений. Проблема, с которой я сталкиваюсь, заключается в том, что сравнение значений продолжает сбрасываться само по себе, а не использовать ранее введенные.
fmin и fmax специально предназначены для использования с числами с плавающей запятой (отсюда и «f»). Если вы используете его для int, вы можете понести потери производительности или точности из-за преобразования, накладных расходов на вызов функций и т. Д. В зависимости от вашего compiler/platform.
Это безопаснее, так как вам нужно явно преобразовать аргументы в соответствие, когда они имеют разные типы. Компилятор не позволит вам случайно преобразовать 64-bit int в 64-bit float, например. Одна только эта причина должна сделать шаблоны вашим выбором по умолчанию. (Кредит Матье М & bk1e)
Даже при использовании с поплавками шаблон может выиграть в производительности. Компилятор всегда имеет возможность встроить вызовы функций шаблона, поскольку исходный код является частью блока компиляции. С другой стороны, иногда невозможно встроить вызов библиотечной функции (общие библиотеки, отсутствие оптимизации времени связи и т. Д.).
fmax можно эмулировать с помощью следующего кода
в то время как для std::max(double, double) это просто
Используя приведенный ниже код я пытаюсь вернуть max и min вектора векторов : v
Вы упускаете весь смысл fmin и fmax. Он был включен в C99, чтобы современные CPUs могли использовать свои собственные (читай SSE) инструкции для min и max с плавающей запятой и избегать теста и ветви (и, следовательно, возможно, неправильно предсказанной ветви). Я переписал код, который использовал std::min и std::max, чтобы вместо этого использовать встроенные функции SSE для min и max во внутренних циклах, и ускорение было значительным.
std::min и std::max-это шаблоны. Таким образом, они могут использоваться на различных типах, которые обеспечивают меньше, чем оператор, включая поплавки, двойники, длинные двойники. Итак, если бы вы хотели написать универсальный код C++, вы бы сделали что-то вроде этого:
Что касается производительности, я не думаю, что fmin и fmax отличаются от своих аналогов C++.
Если ваша реализация предоставляет целочисленный тип 64-bit, вы можете получить другой (неправильный) ответ, используя fmin или fmax. Ваши 64-bit целых чисел будут преобразованы в двойники, которые (по крайней мере, обычно) будут иметь значение, меньшее 64-битного. Когда вы преобразуете такое число в двойное, некоторые из наименее значимых битов могут/будут полностью потеряны.
Это означает, что два числа, которые были действительно разными, могут оказаться равными при преобразовании в double-и результатом будет неправильное число, которое не обязательно равно ни одному из исходных входных данных.
Я бы предпочел функции C++ min/max, если вы используете C++, потому что они зависят от типа. fmin/fmax заставит все быть преобразовано в/из плавающей точки.
Кроме того, функции C++ min/max будут работать с пользовательскими типами до тех пор, пока вы определили operator Поделиться Eric Melski 27 октября 2009 в 16:48
Вы просто используете шаблонный std::min / std::max в C++ и используете все, что доступно в C.
Как указал Ричард Корден, используйте функции C++ min и max, определенные в пространстве имен std. Они обеспечивают безопасность типов и помогают избежать сравнения смешанных типов (т. Е. с плавающей точкой и целым числом), что иногда может быть нежелательным.
Если вы обнаружите, что используемая вами библиотека C++ также определяет min/max как macros, это может вызвать конфликты, тогда вы можете предотвратить нежелательную подстановку макросов, вызывая функции min/max таким образом (обратите внимание на дополнительные скобки):
Помните, что это эффективно отключит поиск, зависящий от аргумента (ADL, также называемый поиском Кенига), если вы хотите полагаться на ADL.
Если другие версии быстрее, то ваша реализация может добавить перегрузки для них, и вы получите преимущество производительности и переносимости:
fmin и fmax предназначены только для переменных с плавающей запятой и двойных переменных.
min и max-это шаблонные функции, которые позволяют сравнивать любые типы, заданные двоичным предикатом. Они также могут использоваться с другими алгоритмами для обеспечения сложной функциональности.
Специализации обеспечат лучшую производительность для типов с плавающей запятой, в то время как общий шаблон будет обрабатывать типы non-floating-point, не пытаясь принудить типы с плавающей запятой к типам с плавающей запятой, как это делают fmin s и fmax es.
Я всегда использую min и max macros для ints. Я не уверен, почему кто-то будет использовать fmin или fmax для целочисленных значений.
Большая проблема с мин и Максом в том, что они не функции, даже если они похожи на них. Если вы сделаете что-то вроде:
Этот вызов функции может быть вызван дважды в зависимости от реализации макроса. Таким образом, в моей организации лучше всего никогда не вызывать min или max с вещами, которые не являются литералом или переменной.
Похожие вопросы:
Я пишу программу C++, используя Xcode, и мне нужно найти максимум и минимум двух чисел. Я решил использовать встроенные функции max и min C++. Когда я это сделаю : float result = min(x1,x2); // x1.
Я хочу написать программу C, которая принимает пользовательский ввод и сравнивает предыдущие значения для минимальных и максимальных значений. Проблема, с которой я сталкиваюсь, заключается в том.