• BodilessGaze@sh.itjust.works
    link
    fedilink
    arrow-up
    9
    arrow-down
    1
    ·
    15 days ago

    That works until you realize your calculations are all wrong due to floating point inaccuracies. YAML doesn’t require any level of precision for floats, so different parsers on a document may give you different results.

    • deegeese@sopuli.xyz
      link
      fedilink
      arrow-up
      14
      ·
      15 days ago

      What text based serialization formats do enforce numeric precision?

      AFAIK it’s always left up to the writer (serializer)

      • BodilessGaze@sh.itjust.works
        link
        fedilink
        arrow-up
        6
        ·
        edit-2
        15 days ago

        Cuelang: https://cuelang.org/docs/reference/spec/#numeric-values

        Implementation restriction: although numeric values have arbitrary precision in the language, implementations may implement them using an internal representation with limited precision. That said, every implementation must:

        • Represent integer values with at least 256 bits.
        • Represent floating-point values with a mantissa of at least 256 bits and a signed binary exponent of at least 16 bits.
        • Give an error if unable to represent an integer value precisely.
        • Give an error if unable to represent a floating-point value due to overflow.
        • Round to the nearest representable value if unable to represent a floating-point value due to limits on precision. These requirements apply to the result of any expression except for builtin functions, for which an unusual loss of precision must be explicitly documented.
        • deegeese@sopuli.xyz
          link
          fedilink
          arrow-up
          3
          ·
          edit-2
          14 days ago

          Thanks for teaching me something, but the obscurity was of your answer just illustrates how rare that requirement is in human readable formats, and mostly limited to data formats designed for numeric precision, like HDF5, FITS or protobuf.

      • squaresinger@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        13 days ago

        Technically, JSON enforces a specific numeric precision by enforcing that numbers are stored as JS-compatible floating point numbers with its associated precision.

        Other than that, the best way to go if you want to have a specific precision is to cast to string before serialisation.