> pow(2,7) = 128.0 when rounding = TONEAREST or UPWARD > = 64.1547.. when rounding = DOWNWARD or TOWARDZERO The libm functions from IBM that were recently installed in glibc come with this remark in sysdeps/ieee754/dbl-64/MathLib.h: /* Assumption: Machine arithmetic operations are performed in */ /* round nearest mode of IEEE 754 standard. */ These math functions use a doubled-precision Dekker arithmetic which is very sensitive to rounding rules and arithetic flaws. Fixing the routines to give reasonable answers with other rounding modes would not be practical. It is customary for a system math library to expect default environment conditions, and I do not think this design actually violates any standards. If you want to use non-default arithmetic settings and have them work portably on various systems, you will have to take defensive steps to protect your program from damage by the operating system and the system library.