Search code examples
floating-pointocamlcomparison-operators

How should one compare floats in OCaml?


In OCaml, comparing Integer 0 with Integer 0 returns true; however, comparing Float 0. to Float 0. returns false:

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

How does one compare floats correctly?


Solution

  • Don't use ==, which is a specialized "physical equality". Use = for everyday code.

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

    For inequality, use <>. The != operator is for "physical inequality", which should also be avoided like the plague in everyday code.

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