- Función signo
-
En matemática, la función signo es una función matemática especial, una función definida a trozos, que obtiene el signo de cualquier número real que se tome por entrada. Se representa generalmente mediante sgn(x), y no debe confundirse con la función seno (sen(x) o bien sin(x)).
Contenido
Definición
La función signo puede definirse de las siguientes maneras:
1. Donde su dominio de definición es R y su conjunto imagen {-1;0;1}.
2. Como la derivada de la función valor absoluto. Su dominio de definición es R - {0} y su conjunto imagen Im={-1;1}
3. sgn(x) = 2u(x) - 1 donde u es la función escalón unitario o Heaviside Step, definida de la siguiente manera:
Propiedades
- La función signo es una función impar, o sea:
- Todo número real x puede expresarse como producto de su valor absoluto y la función signo evaluada en x.
- La función signo es la derivada de la función valor absoluto, (con independencia en cero).
- La función signo es derivable con derivada 0 para todo su dominio excepto en 0. No es derivable en 0 en el sentido ordinario de derivada, pero bajo una noción más general de derivada dentro de la teoría de distribuciones, la derivada de la función signo es dos veces la delta de Dirac.
- Para , una aproximación suave de la función signo es:
Uso en computación
En computación, el concepto es idéntico al ya expresado, pero la siguiente explicación resulta más fácil de entender para programadores no expertos en matemáticas.
El signo es una función que devuelve un valor según si un número o el resultado de una expresión es mayor, menor o igual que 0. Suele representarse en la forma SGN(número).
La mayor parte de los lenguajes de programación aplican esta función. No obstante, si no la aplican, es fácil construirla uno mismo, más abajo se presentan tres métodos.
Es habitual que sobre una variable o sobre el resultado de una expresión nos interese en un momento dado saber si es mayor, menor o igual que 0, ya sea para controlar el flujo según ese dato o para condicionar determinados valores o acciones.
Implementaciones de la función
Cuando un lenguaje no posee dicha función puede proveerse fácilmente con alguno de los métodos que se muestra a continuación en pseudocódigo.
Se presentan tres métodos para implementar la función. Dado que en computación es importante la velocidad, se hace referencia a las mismas.
- El método basado en lógica y aritmética tarda lo mismo para cualquiera de los valores de un número.
- El método basado en comparaciones tarda distinto, según sea el valor positivo, negativo o cero y, por consiguiente, según el orden en que se realicen las comprobaciones para dichos casos. Es ligeramente más rápido que el anterior.
- Finalmente, para el método del valor absoluto, el tiempo también es diferente según sea 0 o distinto de 0 (no discrimina si es positivo o negativo). En cualquier caso, este método es más lento que los anteriores, debido a la operacón de división, que es más costosa.
Uso de la lógica y la aritmética (caso 1)
En lenguajes donde TRUE = -1 y FALSE = 0 En lenguajes de programación se aprovecha la mitad alta de la gama de datos para expresar números negativos cuando el tipo elegido de datos admite esa posibilidad.
Funcion Signo(N) Devolver (N < 0) - (N > 0) Fin Funcion
Examinado el código, se observa que las expresiones de comparación devuelven TRUE= -1 o FALSE=0
- Caso N Mayor que 0: si un número es mayor que 0, luego éste resultado = -1, y por lo tanto no puede ser cierta la expresión (n < 0), entonces al restar, se resta -1. Se verifica que: 0-(-1) = 1
- Caso N igual a 0: Si N vale 0, ambas expresiones son falsas, dan por resultado 0, luego su resta también dará 0. Se verifica que: 0-0 = 0
- Caso N menor que 0: Si n<0, entonces esta expresión = TRUE = -1; por tanto, la otra expresión no puede ser cierta, entonces se le resta 0, que es el resultado de la expresión final (n < 0). Se verifica que: -1-0 = -1
Usando lógica y aritmética (caso 2)
En lenguajes donde TRUE = 1 y FALSE = 0 En lenguaje natural (y cálculo mental), nos resulta más evidente así:
Funcion Signo(N) Devolver (N > 0) - (N < 0) Fin Funcion
Examinado el código, se observa que las expresiones de comparación devuelve TRUE = 1 o bien FALSE = 0
- Caso N mayor que 0: si un número es mayor que 0, luego el resultado de esta expresión = 1, y por lo tanto no puede ser cierta la expresión n < 0; entonces, al restar se resta 0. Se verifica que: 1-0 = 1
- Caso N igual a 0: Si N vale 0, ambas expresiones dan por su lado un resultado de 0, luego su resta también dará 0. Se verifica que: 0-0 = 0
- Caso N menor que 0: Si n < 0, entonces devuelve TRUE = 1, y la expresión n > 0 da 0; por tanto, se le resta 1 resultado de la expresión final (n < 0). Se verifica que 0-1 = -1
Usando comparaciones
Se puede conseguir mayor velocidad de cálculo al preguntar por el signo de una gran cantidad de números, si se sabe a priori si existe una mayor cantidad de números con valores positivos, negativos o iguales a 0, modificando la función de modo que se compruebe en primer lugar la posibilidad más frecuente. En este pseudocódigo, por tanto, se da prioridad a valores positivos, luego negativos y por último a números cuyo valor es 0.
Funcion Signo(N) Si N > 0 luego devolver 1 En otro caso Si N < 0 luego devolver -1 En otro caso devolver 0 Fin condición Fin condición Fin Funcion
Usando el valor absoluto
Esta función es la más lenta de todas las aquí mostradas. Sin embargo, si se sabe a priori que el valor de los números a evaluar son mayoritariamente 0 o bien distintos de 0, es posible modificar la función para que, al evaluar la comprobación, realice en primer lugar el caso más frecuente.
Funcion Signo(N) Si N <> 0 luego devolver N \ ABS(N) - se hace una división entera, que es más rápida En otro caso devolver 0 Fin condición Fin Funcion
Ejemplos
- Obtener el signo de una variable. En el ejemplo ponemos directamente el valor, puede asumirse que la variable en un momento dado contiene tal valor.
- Signo de un número positivo: SGN(25) = 1
- Signo de un número negativo: SGN(-23) = -1
- Signo de 0: SGN(0) = 0
- Obtener el signo de una variable, para condicionar un bucle: Si necesitamos realizar un ciclo de operaciones desde un punto inicial hasta un punto final, necesitamos saber si el punto final es mayor o menor que el inicial para determinar si la cuenta de ciclos es creciente, decreciente o nulo.
En pseudocódigo:
Direccion = SGN(Inicio - Final) Decidir que hacer cuando Direccion = 0 - Un bucle con un incremento de 0 es un bucle infinito Iniciar ciclo para todo elemento en la lista comenzando en Inicio hasta Final con incremento de Direccion hacer las operaciones deseadas al elemento apuntado Fin ciclo
Un ejemplo de código en VB:
- Nótese cómo el bucle iniciaría en 586 e iría hacia atrás hasta llegar a 236. La función signo interviene para determinar cómo es el incremento: si creciente, decreciente o nulo. Si se presenta este último caso, debe decidirse entonces la acción a tomar, tal como se detalla en el siguiente párrafo.
- Si inicio y final tuvieran el mismo valor, el incremento de cada ciclo sería 0. Esto provocaría un ciclo infinito que se remedia con la condición previa al bucle, y se permitiría ejecutar 1 vez el bucle. Si cuando son iguales se desea omitir la ejecución, se debe condicionar a usar el bucle sólo si la Dirección es distinta de 0. Ambas situaciones quedan reflejadas en el código
DIM direccion AS INTEGER, Inicio AS LONG, Final AS LONG, K AS LONG Inicio = 586 Final = 234 Direccion = SGN(Inicio - Final) - Si dirección = 0, lo condicionamos para que el bucle se ejecute 1 vez. IF Direccion = 0 THEN Direccion = 1 - Éste es un ejemplo de condicionado de variables. FOR K = Inicio TO Final STEP Direccion - Éste es un ejemplo que determina si la cuenta de los ciclos es creciente o decreciente. - las operaciones que se necesite realizar NEXT - Si dirección = 0, lo condicionamos para que el bucle no se ejecute ninguna vez. IF Direccion <> 0 THEN - Éste es un ejemplo de control del flujo. For K = Inicio TO Final STEP Direccion - Éste es un ejemplo que determina si la cuenta de los ciclos es creciente o decreciente. - las operaciones que se necesite realizar Next END IF
Puede verse como la utilidad queda patente, cuando se asignan cualesquiera valores a inicio y final, el código se ejecutará correctamente sea cual sea el caso.
Véase también
- Continuidad (matemática)
- Signo
- Representación de números con signo en ordenadores
- Complemento a dos, complemento a uno: enfoques de resta de números en el sistema binario
Categorías:- Funciones especiales elementales
- Programación
Wikimedia foundation. 2010.