2009-03-20 8 views
7

Я нуждается в абсолютном значении функции для поплавков в OCaml и основном языке, кажется, не обладает одним, так что я написал следующее:Абсолютного значения для поплавков в ядре OCaml

let absF (f:float) = if f > 0.0 then f else (f *. -1.0);; 

, который кажется работать на позитивы, но не для негативов, ссылаясь на:

Это выражение имеет тип с плавающей точкой -> поплавок, но здесь используется с типом междунар

Что такое ошибка в моей логике?

ответ

10

При вводе

absF -1.0;; 

OCaml интерпретирует его как

(absF) - (1.0);; 

т.е. как вычитанием. Вместо этого делать

absF (-1.0);; 
13

Основной язык имеет один, abs_float.

Кроме того, вы можете использовать ~-. для обозначения унарного отрицания, и это также относится к целым числам и к оператору ~-. Вы можете задать такой оператор (даже если он уже существует), как это:

let (~-) a : int = 0 - a 
let (~-.) a : float = 0.0 -. a 
2

если у вас есть INT значение можно использовать

# abs(-1) 
- : int = 1 

еще, если у вас есть поплавок

# abs_float(-1.0) 
- : float = 1.