Proyecto

General

Perfil

Funciones y Operadores adicionales » Histórico » Revisión 5

Revisión 4 (Federico Vera, 2018-07-17 05:31) → Revisión 5/8 (Federico Vera, 2018-07-17 06:42)

# 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 
 ~~~ 

 ## 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