Sign что за функция
Содержание
Определение
Сигнум-функция настоящий номер Икс определяется следующим образом:
Свойства
Любое действительное число может быть выражено как произведение его абсолютная величина и его знаковая функция:
Отсюда следует, что всякий раз, когда Икс не равно 0 имеем
Мы также можем констатировать, что:
Сигнум-функция дифференцируема с производной 0 всюду, кроме точки 0. Она не дифференцируема в 0 в обычном смысле, но в соответствии с обобщенным понятием дифференцирования по теория распределения, производная сигнум-функции вдвое больше Дельта-функция Дирака, что можно продемонстрировать с помощью тождества
(где ЧАС(Икс) это Ступенчатая функция Хевисайда используя стандарт ЧАС(0) = 1 / 2 формализм), используя это тождество, легко вывести производную по распределению:
Знак также можно записать с помощью Кронштейн Айверсона обозначение:
Знак также можно записать с помощью этаж и абсолютная величина функции:
Комплексный сигнал
Сигнум-функцию можно обобщить до сложные числа так как:
Из соображений симметрии и для сохранения правильного обобщения сигнум-функции на вещественные числа, а также в комплексной области, обычно определяемой для z = 0 :
Тогда мы имеем (для z ≠ 0 ):
Обобщенная сигнум-функция
;>
Существует ли стандартная функция знака (signum, sgn) в C/C++?
Edit: в частности, я искал функцию, работающую на поплавках.
23 ответов
удивлен никто не оставил дистанционных, типобезопасный язык C++ версия:
(что является хорошим примером первого предостережения.)
Я не знаю стандартной функции для этого. Вот интересный способ написать это:
вот более читаемый способ сделать это:
Если вам нравится тернарный оператор, вы можете сделать это:
существует функция математической библиотеки C99, называемая copysign (), которая берет знак из одного аргумента и абсолютное значение из другого:
похоже, что большинство ответов пропустили исходный вопрос.
существует ли стандартная функция знака (signum, sgn) в C/C++?
более быстро чем вышеуказанные решения, включая самое высокое расклассифицированное одно:
есть способ сделать это без ветвления, но это не очень красиво.
много других интересных, слишком умных вещей на этой странице тоже.
существует ли стандартная функция знака (signum, sgn) в C/C++?
да, в зависимости от определения.
C99 и позже имеет signbit() макрос
int signbit (real-floating x );
The signbit макрос возвращает ненулевое значение тогда и только тогда, когда знак его значения аргумента отрицательный. C11 §7.12.3.6
тем не менее OP хочет что-то немного отличающийся.
глубже:
в общем, в C/C++ нет стандартной функции signum, и отсутствие такой фундаментальной функции говорит вам много об этих языках.
кроме того, я считаю, что обе точки зрения большинства о правильном подходе к определению такой функции в некотором роде правильны, и «спор» об этом на самом деле не является аргументом, как только вы учитываете два важных предостережения:
довольно близко, да?
нет, он не существует в c++, как в matlab. Для этого я использую макрос в своих программах.
принятый ответ с перегрузкой ниже действительно не вызывает — Wtype-limits однако он запускает -Wunused-параметр на
немного не по теме, но я использую этот:
нет приведения для неподписанных типов и никакого дополнительного минуса.
на самом деле у меня есть этот кусок кода, используя ГГС()
зачем использовать тернарные операторы и if-else, когда вы можете просто сделать это
эта функция предполагает:
в то время как целочисленное решение в принятом ответе довольно элегантно, меня беспокоило, что оно не сможет вернуть NAN для двойных типов, поэтому я немного изменил его.
Math. Sign Метод
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает целое число, указывающее знак числа.
Перегрузки
Возвращает целое число, указывающее знак целого числа со знаком размером в собственном формате.
Возвращает целое число, обозначающее знак числа с плавающей запятой одиночной точности.
Возвращает целое число, указывающее знак 8-разрядного целого числа со знаком.
Возвращает целое число, указывающее знак 64-разрядного целого числа со знаком.
Возвращает целое число, указывающее знак десятичного числа.
Возвращает целое число, указывающее знак 16-разрядного целого числа со знаком.
Возвращает целое число, обозначающее знак числа двойной точности с плавающей запятой.
Возвращает целое число, указывающее знак 32-разрядного целого числа со знаком.
Sign(IntPtr)
Возвращает целое число, указывающее знак целого числа со знаком размером в собственном формате.
Параметры
Возвращаемое значение
Возвращаемое значение | Значение |
---|---|
-1 | Значение параметра value меньше нуля. |
0 | Значение параметра value равно нулю. |
1 | Значение параметра value больше нуля. |
Примеры
В следующем примере демонстрируется использование Sign(IntPtr) метода для определения знака IntPtr значения и его отображения на консоли.
Применяется к
Sign(Single)
Возвращает целое число, обозначающее знак числа с плавающей запятой одиночной точности.
Параметры
Возвращаемое значение
Возвращаемое значение | Значение |
---|---|
-1 | Значение параметра value меньше нуля. |
0 | Значение параметра value равно нулю. |
1 | Значение параметра value больше нуля. |
Исключения
Примеры
В следующем примере демонстрируется использование Sign(Single) метода для определения знака Single значения и его отображения на консоли.
Sign что за функция
Sign function (signum function)
Syntax
Description
x./abs(x) if x is complex.
Examples
Find Sign Function
Find the sign function of a number.
Find the sign function of the values of a vector.
Find the sign function of the values of a matrix.
Find the sign function of a complex number.
Plot Sign Function
Plot Real and Imaginary Parts of Sign Function
Plot the real and imaginary parts.
Input Arguments
x — Input
scalar | vector | matrix | multidimensional array
Input, specified as a scalar, vector, matrix, or multidimensional array.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | duration
Complex Number Support: Yes
Extended Capabilities
Tall Arrays
Calculate with arrays that have more rows than fit in memory.
This function fully supports tall arrays. For more information, see Tall Arrays.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
Is there a standard sign function (signum, sgn) in C/C++?
Edit: Specifically, I was looking for a function working on floats.
21 Answers 21
Surprised no one has posted the type-safe C++ version yet:
(Which is a good example of the first caveat.)
I don’t know of a standard function for it. Here’s an interesting way to write it though:
Here’s a more readable way to do it:
If you like the ternary operator you can do this:
There is a C99 math library function called copysign(), which takes the sign from one argument and the absolute value from the other:
It seems that most of the answers missed the original question.
Is there a standard sign function (signum, sgn) in C/C++?
Apparently, the answer to the original poster’s question is no. There is no standard C++ sgn function.
Is there a standard sign function (signum, sgn) in C/C++?
Yes, depending on definition.
C99 and later has the signbit() macro in
int signbit (real-floating x );
The signbit macro returns a nonzero value if and only if the sign of its argument value is negative. C11 §7.12.3.6
Yet OP wants something a little different.
Deeper:
Faster than the above solutions, including the highest rated one:
There’s a way to do it without branching, but it’s not very pretty.
Lots of other interesting, overly-clever stuff on that page, too.
In general, there is no standard signum function in C/C++, and the lack of such a fundamental function tells you a lot about these languages.
Apart from that, I believe both majority viewpoints about the right approach to define such a function are in a way correct, and the «controversy» about it is actually a non-argument once you take into account two important caveats:
A signum function should always return the type of its operand, similarly to an abs() function, because signum is usually used for multiplication with an absolute value after the latter has been processed somehow. Therefore, the major use case of signum is not comparisons but arithmetic, and the latter shouldn’t involve any expensive integer-to/from-floating-point conversions.