------- Comment #130 from nszabolcs at gmail dot com 2009-07-22 12:10 ------- (In reply to comment #129) > I am a bit wondering if this bug is also for the case (a < b) && (b < a) == > true. Is it?
i guess so, see: #include <stdlib.h> #include <stdio.h> #define axiom_order(a,b) !(a < b && b < a) #define axiom_eq(a) a == a #define third ((double)atoi("1")/atoi("3")) int main(void) { if (axiom_order(third, third)) puts("ok"); else puts("error"); if (axiom_eq(third)) puts("ok"); else puts("error"); return 0; } here this prints error error with gcc 4.2 and -S shows that this is long double vs double precision problem > Because if so, this becomes way more serious, as for example std::set<double> > is broken then (and depending on the STL implementation, it will throw > assertions then). in C99 (+TC1,TC2,TC3) different precision is not allowed 5.1.2.3 p12: ... In particular, casts and assignments are required to perform their specified conversion 5.2.4.2.2 p8: Except for assignment and cast (which remove all extra range and precision), the values 8 of operations with floating operands and values subject to the usual arithmetic conversions and of floating constants are evaluated to a format whose range and precision may be greater than required by the type. i'm not sure about c++ though -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. -- To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org