[snip] > > does not work correctly on some machines. > > Could you be more specific. On which machines for instance ?
Me, myself personally tested on Intel Celeron 733, OS WinXP. Compiler used: gcc 3.2 mingw port for windows. Also reported not to work on Sun machine although on some other computers this works. That mean sometimes this work and sometimes not :) Depends on processor perhaps, because I've read asm output (I'm just a crap when it comes to x86 asm reading but...): // g++ -save-temps -O0 (to avoid overoptimizations when variable comparison to itself is just replaced with some boolean constant) There we have is_nan for floats - .section .text$_ZN4math4geom6is_nanIfEEbRKT_,"x" .linkonce discard .align 2 .globl __ZN4math4geom6is_nanIfEEbRKT_ .def __ZN4math4geom6is_nanIfEEbRKT_; .scl 2; .type 32; .endef __ZN4math4geom6is_nanIfEEbRKT_: LFB29: // function prologue pushl %ebp LCFI225: movl %esp, %ebp LCFI226: movl 8(%ebp), %eax movl 8(%ebp), %edx // operations on stack, sweet flds (%eax) // load the same flds (%edx) // variable to 2 copr. registers fxch %st(1) fucompp // comparison (x != x), obviously fnstsw %ax andb $69, %ah xorb $64, %ah setne %al andl $255, %eax // && std::numeric_limits<float>::has_quiet_NaN popl %ebp // function epilogue ret Seems like this is not compilers fault. Correct me if I'm wrong. And as me uses intervals lib and is_nan f-tion, specifically; I'm really concerned about such problems. If workaround is needed and it's not so simple, perhaps it could be separated from certain library and moved itself to numeric_utility.hpp or something? Respect, Justinas V.D. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost