Valore assoluto per i float nel core OCaml
-
21-08-2019 - |
Domanda
Ho bisogno di una funzione di valore assoluto per i float in OCaml e il linguaggio principale non sembra possederne una, quindi ho scritto quanto segue:
let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
che sembra funzionare per gli aspetti positivi ma non per quelli negativi, citando:
Questa espressione è di tipo float -> float ma qui viene utilizzata con il tipo int
Qual è l'errore nella mia logica?
Soluzione
Quando digiti
absF -1.0;;
OCaml lo interpreta come
(absF) - (1.0);;
cioè.come sottrazione.Invece, fallo
absF (-1.0);;
Altri suggerimenti
Il linguaggio di base ha uno, abs_float
.
Inoltre, è possibile utilizzare ~-.
per indicare la negazione unaria, e questo vale per gli interi e con il ~-
dell'operatore. È possibile definire un tale operatore (anche se esiste già) in questo modo:
let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a
se avete valore int può utilizzare
# abs(-1)
- : int = 1
altra cosa se si dispone di un float
# abs_float(-1.0)
- : float = 1.