El valor absoluto de los flotadores en el núcleo OCaml
-
21-08-2019 - |
Pregunta
Estoy en la necesidad de una función de valor absoluto para los flotadores en OCaml y el núcleo del lenguaje no parecen poseer una, así que escribí lo siguiente:
let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
que parece funcionar para los positivos, pero no para los negativos, citando:
Esta expresión tiene tipo de flotador -> float, pero se usa aquí con el tipo int
¿Cuál es el error en mi lógica?
Solución
Cuando se escribe
absF -1.0;;
OCaml lo interpreta como
(absF) - (1.0);;
es decir. como una resta. En su lugar, hacer
absF (-1.0);;
Otros consejos
El lenguaje núcleo tiene uno, abs_float
.
Además, puede utilizar ~-.
para denotar la negación unaria, y esto se aplica a números enteros, así como con la ~-
operador. Se puede definir como un operador (a pesar de que ya existe) de esta manera:
let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a
si tiene valor int puede utilizar
# abs(-1)
- : int = 1
otra cosa si usted tiene un flotador
# abs_float(-1.0)
- : float = 1.