Proyecto

General

Perfil

Funciones y Operadores adicionales » Histórico » Versión 3

Federico Vera, 2018-07-12 17:52

1 1 Federico Vera
# Funciones y Operadores adicionales
2
3
{{>toc}}
4
5 3 Federico Vera
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).
6 1 Federico Vera
7 3 Federico Vera
## Operadores de comparación
8
Además de los operadores aritméticos y lógicos, están disponibles los siguientes operadores de comparación: `<`, `<=`, `>`, `>=`, `!=` y `==`. 
9
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:
10 1 Federico Vera
11 3 Federico Vera
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.
12 1 Federico Vera
13 3 Federico Vera
### Precedencia
14
Al utilizar los operadores de comparación, la precedencia se altera quedando:
15 1 Federico Vera
~~~
16 3 Federico Vera
PRIMERO->  * / %  - +  > >= < <=  ¬  &  |  == !=   <-ÚLTIMO
17
           -----  ---  ---------  -  -  -  -----    
18
           ^^^ Los guiones indican los grupos que tienen la misma precedencia
19 1 Federico Vera
~~~
20
21
## Funciones lógicas
22 3 Federico Vera
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)
23 1 Federico Vera
* `and(a, b)`: Y lógico _equivalente a `a & b`_
24
* `or(a, b)`: O lógico _equivalente a `a | b`_
25
* `xor(a, b)`: O exclusivo
26
* `nand(a, b)`: _equivalente a `¬(a & b)`_
27
* `nor(a, b)`: _equivalente a `¬(a | b)`_
28
* `xnor(a, b)`: O exclusivo negado 
29
* `not(a)`: _equivalente a `¬a`_
30
31
## Constantes lógicas
32
* `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.
33
* `false()`: falso (`0.0`)
34
35 2 Federico Vera
## Funciones adicionales
36
* `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()` 
37
* `equals(a, b)`: Equivalente a `a == b`, por lo tanto se cumplen las mismas condiciones.
38
* `sinc(x)`: [Seno cardinal de `x`](https://en.wikipedia.org/wiki/Sinc_function) (no normalizado), equivalente a `sin(x)/x`
39 1 Federico Vera
40 2 Federico Vera
## Código
41 1 Federico Vera
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