On Thursday, 17 December 2015 at 11:58:35 UTC, drug wrote:
On 17.12.2015 14:52, Andrea Fontana wrote:

You should publish some code to check...
Too much code to public - operations are simple, but there are many branches and reducing may take much time . In fact I asked to understand _in general_ if it worth diving into code to find the source of the difference or take it easy and go on... If D and C++ use the same things to process float types then it worth to dive, but if there is some issues, then it doesn't.

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 )

Reply via email to