Proyecto

General

Perfil

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

Federico Vera, 2018-07-12 17:41

1 1 Federico Vera
# Funciones y Operadores adicionales
2
3
{{>toc}}
4
5
There are a number of extra functions and operators included in this version of `exp4j`, non of this are enabled by default, they are in the [`net.objecthunter.exp4j.extras`](https://redmine.riddler.com.ar/projects/exp4j/repository/revisions/master/show/src/main/java/net/objecthunter/exp4j/extras) package.
6
7
## Comparison Operators
8
Aside from the arithmetic operators several comparison operators are included: `<`, `<=`, `>`, `>=`, `!=` and `==`. 
9
Please note that since `exp4j` itself has no concept of `boolean`, the results given by all of the comparison operators will be `1.0` if `true` and `0.0` if `false`. Let it be noted that due to rounding, equality operators use a radix in which they consider numbers to be "equal", that is:
10
11
Let `a` and `b` be two real numbers, `a == b` will evaluate to `true` if and only if the distance between `a` and `b` (`dist(a, b) := abs(a - b)`) is less or equal than [`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) and `false` otherwise.
12
13
### Precedence
14
Operator precedence is altered when using the comparison operators, the new precedence is:
15
~~~
16
FIRST->  * / %  - +  > >= < <=  ¬  &  |  == !=   <-LAST
17
         -----  ---  ---------  -  -  -  -----    
18
         ^^^ The dashes indicate groups with the same precedence
19
~~~
20
21
## Funciones lógicas
22
Even though we have boolean operators, there are also a number of boolean functions that can be used (some people prefer functions)
23
* `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