D float types operations vs C++ ones

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Dec 17 05:09:44 PST 2015


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 )



More information about the Digitalmars-d-learn mailing list