From: Tomonori Kouya <> Date: Sun, 17 Feb 2008 20:45:30 -0500 Subject: Strange Phenomenon of Cosine Function on Linux x86_64 env Dear NA digest subscribers, I am in trouble about the problem on cosine function in IEEE754 double precision. On Fedora Core 4/8 or CentOS 4/5 x86_64 + gcc 4 env, I ran the program which included the functions below in 4 different rounding-modes (RN, RZ, RP, RM) in order to know amount of round-off error. current_rmode = fegetround(); // get current rounding mode fesetround(rmode); // change rounding mode ret = cos(x); // cosine function fesetround(current_rmode); // restore rounding mode As a result, very different values of cosine func are obtained like: cos( 5.04710873550435011e+01) = RN, RZ: 9.78937668119415738e-01, 9.78937668119415627e-01 RP, RM: 5.55012195441045186e-01, 9.78937668119415627e-01 ^^^^^^^^^^^^^^^^^^^^^^^ incorrect! In the RN mode, the cosine function always returns correct values, but often incorrect and very different values in other 3 modes. If you want to check this phenomenon on your env, you can download my sample program from http://na-inet.jp/weblog/archives/test_cos.c. By trying to run the above "test_cos.c" on 32bit and 64bit Linux environments around me, this phenomenon could not be found in 32bit env such as Pentium 3/4 and in Mac OS X 10.4 + Xcode + Core2Duo. I will appreciate your sending the information about this problem. Sincerely yours, Tomonori KOUYA <>