http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51559
Domingo Alvarez <mingodad at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID --- Comment #2 from Domingo Alvarez <mingodad at gmail dot com> 2011-12-15 09:40:35 UTC --- Doing more tests I discovered that the problem is inherent to using floating points to initialize decimal128, doing it step by step with integer initialization gives the expected result. decimal128 d10(10), d1000(1000), d3(3), d99(99), d201(201); d3 /= d10); //d3 = 0.3 d99 /= d1000; //d99 = 0.099 d3 -= d99; //d3 = 0.201 d3 *= d1000; // d3 = 201 now d3 == d201 Sorry by the false bug report.