• Lmaydev@programming.dev
    link
    fedilink
    arrow-up
    7
    arrow-down
    2
    ·
    6 months ago

    Nan isn’t like null at all. It doesn’t mean there isn’t anything. It means the result of the operation is not a number that can be represented.

    The only option is that operations that would result in nan are errors. Which doesn’t seem like a great solution.

    • Ephera@lemmy.ml
      link
      fedilink
      arrow-up
      6
      ·
      6 months ago

      Well, that is what I meant. That NaN is effectively an error state. It’s only like null in that any float can be in this error state, because you can’t rule out this error state via the type system.

      Why do you feel like it’s not a great solution to make NaN an explicit error?

      • CapeWearingAeroplane@sopuli.xyz
        link
        fedilink
        arrow-up
        1
        ·
        6 months ago

        Theres plenty of cases where I would like to do some large calculation that can potentially give a NaN at many intermediate steps. I prefer to check for the NaN at the end of the calculation, rather than have a bunch of checks in every intermediate step.

        How I handle the failed calculation is rarely dependent on which intermediate step gave a NaN.

        This feels like people want to take away a tool that makes development in the engineering world a whole lot easier because “null bad”, or because they can’t see the use of multiplying 1e27 with 1e-30.

      • Lmaydev@programming.dev
        link
        fedilink
        arrow-up
        2
        arrow-down
        1
        ·
        6 months ago

        Float processing is at the hardware level. It needs a way to signal when an unrepresented value would be returned.

        • Ephera@lemmy.ml
          link
          fedilink
          arrow-up
          2
          ·
          6 months ago

          My thinking is that a call to the safe division method would check after the division, whether the result is a NaN. And if it is, then it returns an Error-value, which you can handle.

          Obviously, you could do the same with a NaN by just throwing an if-else after any division statement, but I would like to enforce it in the type system that this check is done.

          • Lmaydev@programming.dev
            link
            fedilink
            arrow-up
            1
            ·
            edit-2
            6 months ago

            I feel like that’s adding overhead to every operation to catch the few operations that could result in a nan.

            But I guess you could provide alternative safe versions of float operations to account for this. Which may be what you meant thinking about it lol