------- Comment #13 from jan at epgmod dot phys dot tue dot nl 2010-02-17 22:54 ------- (In reply to comment #10) > Regarding the specific semantics, Richard, there is little to say: we want the > C99 semantics, by and large. Maybe there are some missing details, but we > decided already that, when we switched the complex multiplication to be the > slow, C99 annex, by default. Thus, in a first, and second too, approx, the C++ > standard doesn't count, really, this is just, sketched: > > __complex__ double val; > double d; > val *= d; >
But the point in question is that gcc *does not implement Annex G-4.1 (item 2) correctly*. That clearly states that u*(x+iy) = (ux)+i(uy), whereas gcc does (u+0i)*(x+iy), leading to wrongly signed zeros. The patch fixes exactly that (for C++) by circumventing gcc's flawed implementation of mixed arithmetic involving C99's complex type. Paolo, Richard, thank you for your time and patience. In view of the above, I hope you reconsider this issue. PS: could you (or Gabriel dos Reis, if he reads this) also comment on the last bullit of my original message (From the C++0x working draft...)? As indicated, the standard differs from what libstdc++ implements. Thank you in advance -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43108