Proyecto

General

Perfil

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

Federico Vera, 2018-07-17 10:04

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 5 Federico Vera
48
## Funciones relacionadas con señales
49 2 Federico Vera
* `sinc(x)`: [Seno cardinal de `x`](https://en.wikipedia.org/wiki/Sinc_function) (no normalizado), equivalente a `sin(x)/x`
50 4 Federico Vera
51
## Constantes adicionales
52
* `inf()`: Devuelve el valor de `Double.POSITIVE_INFINITY`
53 1 Federico Vera
54 7 Federico Vera
## Funciones basadas en expresiones
55
* Ahora es posible crear funciones basadas en expresiones! Ver: [[Funciones basadas en expresiones]]
56
57 2 Federico Vera
## Código
58 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