On Monday, 22 July 2019 at 13:23:26 UTC, Guillaume Piolat wrote:
On Monday, 22 July 2019 at 12:49:24 UTC, drug wrote:
I have almost identical (I believe it at least) implementation
(D and C++) of the same algorithm that uses Kalman filtering.
These implementations though show different results (least
significant digits). Before I start investigating I would like
to ask if this issue (different results of floating points
calculation for D and C++) is well known? May be I can read
something about that in web? Does D implementation of floating
point types is different than the one of C++?
Most of all I'm interesting in equal results to ease comparing
outputs of both implementations between each other. The
accuracy itself is enough in my case, but this difference is
annoying in some cases.
Typical floating point operations in single-precision like a
simple (a * b) + c will provide a -140dB difference if order is
changed. It's likely the order of operations is not the same in
your program, so the least significant digit should be
different.
What I would recommend is compute the mean relative error, in
double, and if it's below -200 dB, not bother. This is an
incredibly low relative error of 0.00000001%.
You will have no difficulty making your D program deterministic,
but knowing exactly where the C++ and D differ will be long and
serve no purpose.