В OCaml, сравнивая Integer 0
с Integer 0
true
; Однако , сравнивая Float 0.
с Float 0.
возвращается false
:Как сравнить float в OCaml?
# 0 == 0;;
- : bool = true
# 0. == 0.;;
- : bool = false
Как один сравнения поплавки правильно?
В OCaml, сравнивая Integer 0
с Integer 0
true
; Однако , сравнивая Float 0.
с Float 0.
возвращается false
:Как сравнить float в OCaml?
# 0 == 0;;
- : bool = true
# 0. == 0.;;
- : bool = false
Как один сравнения поплавки правильно?
Не используйте ==
, который является специализированным «физическим равенством». Используйте =
для ежедневного кода.
# 0 = 0;;
- : bool = true
# 0.0 = 0.0;;
- : bool = true
Для неравенства используйте <>
. Оператор !=
предназначен для «физического неравенства», которого также следует избегать, как чума в повседневном коде.
# 0 <> 0;;
- : bool = false
# 0.0 <> 0.0;;
- : bool = false
Спасибо Джеффри. Но тогда как мы должны смягчать «! =»? '# 0.! = 0. ;; -: bool = true # 0! = 0 ;; -: bool = false ' – UnSat
Отличный вопрос. По той же причине используйте '<>'. Я уточню свой ответ. –
всегда сравнивают поплавки против дельты, например, если (f1 - f2) <0,0000001 – Leo
@Leo: Вы забыли абс в сравнении. –
вы должны использовать относительное сравнение, а не абсолютное сравнение в целом. – nlucaroni