• Chobbes@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    1 year ago

    You know, I was going to let this slide under the notion that we’re just ignoring the limited precision of floating point numbers… But then I thought about it and it’s probably not right even if you were computing with real numbers! The decimal representation of real numbers isn’t unique, so this could tell me that “2 = 1.9999…” is odd. Maybe your string coercion is guaranteed to return the finite decimal representation, but I think that would be undecidable.

    • backgroundcow@lemmy.world
      link
      fedilink
      arrow-up
      4
      ·
      1 year ago

      Ackchyually-- IEEE 754 guarantees any integer with absolute value less than 2^24 to be exactly representable as a single precision float. So, the “divide by 2, check for decimals” should be safe as long as the origin of the number being checked is somewhat reasonable.

      • Chobbes@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        Of course, but it’s somewhat nasty when all of a sudden is_even doesn’t do what you expect :).

    • lysdexic@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      The decimal representation of real numbers isn’t unique, so this could tell me that “2 = 1.9999…” is odd.

      I don’t think your belief holds water. By definition an even number, once divided by 2, maps to an integer. In binary representations, this is equivalent to a right shift. You do not get a rounding error or decimal parts.

      But this is nitpicking a tongue-in-cheek comment.