Funciones y Operadores adicionales » Histórico » Versión 5
Federico Vera, 2018-07-17 06:42
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 | 4 | Federico Vera | * `isNan(a)`: Dice si un valor es `No es un número` (`NaN`) |
39 | * `min(x, y)`: Devuelve el menor (más cercano a -Infinito) de dos números. |
||
40 | * `max(x, y)`: Devuelve el mayor (más cercano a +Infinito) de dos números. |
||
41 | * `lcm(x, y)`: Devuelve el mínimo común múltiplo de dos números. |
||
42 | * `gcd(x, y)`: Devuelve el máximo común divisor de dos números. |
||
43 | * `round(x)`: Rendondea `x` al entero mas cercano. |
||
44 | 5 | Federico Vera | |
45 | ## Funciones relacionadas con señales |
||
46 | 2 | Federico Vera | * `sinc(x)`: [Seno cardinal de `x`](https://en.wikipedia.org/wiki/Sinc_function) (no normalizado), equivalente a `sin(x)/x` |
47 | 4 | Federico Vera | |
48 | ## Constantes adicionales |
||
49 | * `inf()`: Devuelve el valor de `Double.POSITIVE_INFINITY` |
||
50 | 1 | Federico Vera | |
51 | 2 | Federico Vera | ## Código |
52 | 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). |