title: Go float comparison
body: <p>In order to compare two floats (float64) for equality in Go, my superficial understanding of IEEE 754 and binary representation of floats makes me think that this is a good solution:</p>
  
  <pre><code>func Equal(a, b float64) bool {
      ba := math.Float64bits(a)
      bb := math.Float64bits(b)
      diff := ba - bb
      if diff &lt; 0 {
          diff = -diff
      }
      // accept one bit difference
      return diff &lt; 2
  }
  </code></pre>
  
  <p>The question is: Is this a more generic, more precise, and more efficient, way to compare two arbitrarily large or small floats for "almost equalness", than the old <code>abs(diff) &lt; epsilon</code> hack? My reasoning being that if one allows only one bit difference in the binary representation, then the compared numbers certainly could not be any more equal, apart from strict equality, which obviously (as pointed out in the comments) can be checked with <code>==</code> for floats.</p>
  
  <p>Note: I have edited the question to make it more clear. </p>