Funciones y Operadores adicionales » Histórico » Versión 8
Federico Vera, 2018-08-02 02:20
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 | 6 | Federico Vera | ### Advertencia! |
22 | See [[Advertencias#Concatenar-operadores-de-comparación|Advertencias -> Concatenar Operadores de Comparación]] |
||
23 | |||
24 | 1 | Federico Vera | ## Funciones lógicas |
25 | 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) |
26 | 1 | Federico Vera | * `and(a, b)`: Y lógico _equivalente a `a & b`_ |
27 | * `or(a, b)`: O lógico _equivalente a `a | b`_ |
||
28 | * `xor(a, b)`: O exclusivo |
||
29 | * `nand(a, b)`: _equivalente a `¬(a & b)`_ |
||
30 | * `nor(a, b)`: _equivalente a `¬(a | b)`_ |
||
31 | * `xnor(a, b)`: O exclusivo negado |
||
32 | * `not(a)`: _equivalente a `¬a`_ |
||
33 | |||
34 | ## Constantes lógicas |
||
35 | * `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. |
||
36 | * `false()`: falso (`0.0`) |
||
37 | |||
38 | 2 | Federico Vera | ## Funciones adicionales |
39 | * `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()` |
||
40 | * `equals(a, b)`: Equivalente a `a == b`, por lo tanto se cumplen las mismas condiciones. |
||
41 | 4 | Federico Vera | * `isNan(a)`: Dice si un valor es `No es un número` (`NaN`) |
42 | * `min(x, y)`: Devuelve el menor (más cercano a -Infinito) de dos números. |
||
43 | * `max(x, y)`: Devuelve el mayor (más cercano a +Infinito) de dos números. |
||
44 | * `lcm(x, y)`: Devuelve el mínimo común múltiplo de dos números. |
||
45 | * `gcd(x, y)`: Devuelve el máximo común divisor de dos números. |
||
46 | * `round(x)`: Rendondea `x` al entero mas cercano. |
||
47 | 8 | Federico Vera | * `deg2rad(x)`: Devuelve el valor de `x` expresado en radianes. |
48 | * `rad2deg(x)`: Devuelve el valor de `x` expresado en grados. |
||
49 | 5 | Federico Vera | |
50 | 1 | Federico Vera | ## Funciones relacionadas con señales |
51 | 8 | Federico Vera | * `sinc(t)`: [Seno cardinal de `x`](https://en.wikipedia.org/wiki/Sinc_function) (no normalizado), equivalente a `sin(t)/t` |
52 | * `triangle(t)`: Señal triangular |
||
53 | * `sawtooth(t)`: Señal diente de sierra |
||
54 | * `heavyside(t)`: Función escalón |
||
55 | * `rectangle(t, X, Y)`: Función rectángula |
||
56 | |||
57 | 4 | Federico Vera | |
58 | ## Constantes adicionales |
||
59 | * `inf()`: Devuelve el valor de `Double.POSITIVE_INFINITY` |
||
60 | 1 | Federico Vera | |
61 | 7 | Federico Vera | ## Funciones basadas en expresiones |
62 | * Ahora es posible crear funciones basadas en expresiones! Ver: [[Funciones basadas en expresiones]] |
||
63 | |||
64 | 2 | Federico Vera | ## Código |
65 | 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). |