On 17.12.2015 16:09, Nicholas Wilson wrote:

Yes the float types are the same. floats doubles are identical long
double == real ( at least for x86)

The only difference is that float are default initialised to NaN in D.
The sources of difference are likely to occur from
- const folding (varying by compiler e.g. gcc uses libgmp for high
precision floating point for constant folding where as other compliers
may not)
- type promotions and truncations
I.e.
double a = ... ,b = ... ;
float c = a+b;
float d = cast(float)a + cast(float)b;

c is unlikely to be bit for bit equal to d.

floating point operations are NOT commutative nor are they distributive.
Order of operations does matter.
i.e. a+(b+c) !=(a+b) +c and a*(b+c) != a*b + a*c (!= means not
necessarily equal)

you should always compare floats for equality with an epsilon (unless
0.0 +-inf )

Thanks for answer. My C++ version is tracing D version so commutativity and distributivity aren't requred because order of operations is the same (I guess so at least), so I hoped for bit to bit equality (it simplifies comparing serialized data). But I found that error between D and C++ versions grows if more data processed so I should investigate it anyway.

Reply via email to