On Thursday, 13 October 2022 at 19:27:22 UTC, Steven Schveighoffer wrote:

Thank you Steven, for your very detailed answer.

It doesn't look really that far off. You can't expect floating point parsing to be exact, as floating point does not perfectly represent decimal numbers, especially when you get down to the least significant bits.

This is sad - because "exact" match is what I need in this toy example.

But I want to point out something you may have missed:

Actually I've meant those things too :)

But look also at f3, and how actually D is closer to the expected value than with the other languages.

If you want exact representation of data, parse it as a string instead of a double.

Unfortunately it is not helped me in this task (which is pretty awkward): it parses some GeoData from JSON file. Then create representation of that data into string format and use hash from that string. Because they use the Hash - I need exact the same string representation to match the answer.

I'm assuming you are comparing for testing purposes? If you are, just realize you can never be accurate here. You just have to live with the difference. Typically when comparing floating point values, you use an epsilon to ensure that the floating point value is "close enough", you can't enforce exact representation.

-Steve

Actually it was my attempt to implement the benchmark-game: https://programming-language-benchmarks.vercel.app/problem/json-serde

As you can see many languages have passed tests which I assume they have exactly same representation of that float numbers. Maybe I am wrong and did not understand code from other realizations. But at least I test python and crystal and found pretty confusing their results (what you wrote about more accurate example of f3), but what surpsised me even more: they have exactly same confused results with those floating numbers. That's why I've made a conclusion that maybe it is some special and declared behavior/rule for that and I just can't find how to replicate that "well known behavior" in D.


Reply via email to