Funciones y Operadores adicionales » Histórico » Revisión 6
Revisión 5 (Federico Vera, 2018-07-17 06:42) → Revisión 6/8 (Federico Vera, 2018-07-17 10:01)
# Funciones y Operadores adicionales
{{>toc}}
Existen un número de operadores y funciones adicionales incluidos en esta versión de `exp4j`, ninguno de estos está activado por defecto, y se encuentran disponibles en el paquete [`net.objecthunter.exp4j.extras`](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/show/src/main/java/net/objecthunter/exp4j/extras).
## Operadores de comparación
Además de los operadores aritméticos y lógicos, están disponibles los siguientes operadores de comparación: `<`, `<=`, `>`, `>=`, `!=` y `==`.
Es importante notar que `exp4j` no tiene concepto de `boolean`, los resultados entregados por los operadores de comparación son `1.0` para `verdadero` y `0.0` para `falso`. Dado que pueden existir situaciones de redondeo, los operadores de igualdad utilizan un radio en el cual consideran a los valores como "iguales", es decir:
Sean `a` y `b` dos números reales, entonces `a == b` será `verdadero` si la distancia entre `a` y `b` (`dist(a, b) := abs(a - b)`) es menor o igual a [`1e-12` (`0.000000000001`)](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/entry/src/main/java/net/objecthunter/exp4j/extras/FunctionsMisc.java#L38) y `falso` de otra forma.
### Precedencia
Al utilizar los operadores de comparación, la precedencia se altera quedando:
~~~
PRIMERO-> * / % - + > >= < <= ¬ & | == != <-ÚLTIMO
----- --- --------- - - - -----
^^^ Los guiones indican los grupos que tienen la misma precedencia
~~~
### Advertencia!
See [[Advertencias#Concatenar-operadores-de-comparación|Advertencias -> Concatenar Operadores de Comparación]]
## Funciones lógicas
Aunque existen operadores lógicos incluidos, se dispone también de un número de funciones booleans que pueden ser utilizadas (existen quienes prefieren las funciones)
* `and(a, b)`: Y lógico _equivalente a `a & b`_
* `or(a, b)`: O lógico _equivalente a `a | b`_
* `xor(a, b)`: O exclusivo
* `nand(a, b)`: _equivalente a `¬(a & b)`_
* `nor(a, b)`: _equivalente a `¬(a | b)`_
* `xnor(a, b)`: O exclusivo negado
* `not(a)`: _equivalente a `¬a`_
## Constantes lógicas
* `true()`: verdadero (`1.0`) (se considera como verdadero a cualquier valor distinto de cero, pero la función `true()` devuelve `1.0` así como los operadores booleans y de comparación.
* `false()`: falso (`0.0`)
## Funciones adicionales
* `if(e, v_true, v_false)`: Ramifica la expresión, se evalúa como `v_true` si `e == true()` y `v_false` si `e == false()`
* `equals(a, b)`: Equivalente a `a == b`, por lo tanto se cumplen las mismas condiciones.
* `isNan(a)`: Dice si un valor es `No es un número` (`NaN`)
* `min(x, y)`: Devuelve el menor (más cercano a -Infinito) de dos números.
* `max(x, y)`: Devuelve el mayor (más cercano a +Infinito) de dos números.
* `lcm(x, y)`: Devuelve el mínimo común múltiplo de dos números.
* `gcd(x, y)`: Devuelve el máximo común divisor de dos números.
* `round(x)`: Rendondea `x` al entero mas cercano.
## Funciones relacionadas con señales
* `sinc(x)`: [Seno cardinal de `x`](https://en.wikipedia.org/wiki/Sinc_function) (no normalizado), equivalente a `sin(x)/x`
## Constantes adicionales
* `inf()`: Devuelve el valor de `Double.POSITIVE_INFINITY`
## Código
El código está [aquí](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/entry/src/main/java/net/objecthunter/exp4j/extras/OperatorsComparison.java), [aquí](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/entry/src/main/java/net/objecthunter/exp4j/extras/FunctionsMisc.java) u [aquí](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/entry/src/main/java/net/objecthunter/exp4j/extras/FunctionsBoolean.java).
Volver al inicio