2014-12-19 6 views
2

В OCaml, сравнивая Integer 0 с Integer 0true; Однако , сравнивая Float 0. с Float 0. возвращается false:Как сравнить float в OCaml?

# 0 == 0;; 
- : bool = true 
# 0. == 0.;; 
- : bool = false 

Как один сравнения поплавки правильно?

+1

всегда сравнивают поплавки против дельты, например, если (f1 - f2) <0,0000001 – Leo

+2

@Leo: Вы забыли абс в сравнении. –

+1

вы должны использовать относительное сравнение, а не абсолютное сравнение в целом. – nlucaroni

ответ

6

Не используйте ==, который является специализированным «физическим равенством». Используйте = для ежедневного кода.

# 0 = 0;; 
- : bool = true 
# 0.0 = 0.0;; 
- : bool = true 

Для неравенства используйте <>. Оператор != предназначен для «физического неравенства», которого также следует избегать, как чума в повседневном коде.

# 0 <> 0;; 
- : bool = false 
# 0.0 <> 0.0;; 
- : bool = false 
+0

Спасибо Джеффри. Но тогда как мы должны смягчать «! =»? '# 0.! = 0. ;; -: bool = true # 0! = 0 ;; -: bool = false ' – UnSat

+0

Отличный вопрос. По той же причине используйте '<>'. Я уточню свой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^