This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: Message Nav: [Date Index] [Subject Index] [Author Index] [Thread Index] [Date Prev] [Date Next] [Thread Prev] [Thread Next] [Raw text]

# floating-point math problem in Cygwin 1.7?

• From: Linh Phan <linhphan at usc dot edu>
• To: cygwin at cygwin dot com
• Date: Thu, 24 Dec 2009 13:19:12 -0800 (PST)
• Subject: floating-point math problem in Cygwin 1.7?
• Authentication-results: msg-ironport2.usc.edu; dkim=neutral (message not signed) header.i=none

```Hi,

I have wondering why when I do floating-point math in Cygwin 1.7, Cygwin does not output the "correct" result, eg:

main () {
double qcb[4] = {0.41585680180318363, 0.70823637211274604, 0.089200955545759006,  -0.56347808399291521};
double qba[4] = {0.09648538897087118, -0.37032037362514358, 0.89403246842889339,   0.23293633462432001};
double qca[4];

qca[0]= qcb[3]*qba[0] + qcb[2]*qba[1] - qcb[1]*qba[2] + qcb[0]*qba[3];
qca[1]= -qcb[2]*qba[0] + qcb[3]*qba[1] + qcb[0]*qba[2] + qcb[1]*qba[3];
qca[2]= qcb[1]*qba[0] - qcb[0]*qba[1] + qcb[3]*qba[2] + qcb[2]*qba[3];
qca[3]= -qcb[0]*qba[0] - qcb[1]*qba[1] - qcb[2]*qba[2] + qcb[3]*qba[3];

// I am expecting the result to be:

printf("qca = [-0.623718486146499718, 0.736824293298044886, -0.260654850643024127, 0.011147182658310384] CORRECT (LINUX/SOLARIS)\n");

// I get the above result on both Linux/Solaris AND even when running under Cygwin's gdb and using gdb's printf

// but when I compile and run on cygwin, I get the wrong result:
printf("qca = [%.18f, %.18f, %.18f, %.18f] NOT CORRECT (CYGWIN)\n",qca[0],qca[1],qca[2],qca[3]);
}

Here is the output when I compiled and run on cygwin:

qca = [-0.623718486146499718, 0.736824293298044886, -0.260654850643024127, 0.011147182658310384] CORRECT (LINUX/SOLARIS)
qca = [-0.623718486146499607, 0.736824293298044886, -0.260654850643024072, 0.011147182658310373] NOT CORRECT (CYGWIN)

Here's the output when running under cygwin's gdb (it matches Linux/Solaris outputs but not cygwin?s output):

(gdb) printf "%.18f\n", qcb[3]*qba[0] + qcb[2]*qba[1] - qcb[1]*qba[2] + qcb[0]*qba[3]
-0.623718486146499718
(gdb) printf "%.18f\n", -qcb[2]*qba[0] + qcb[3]*qba[1] + qcb[0]*qba[2] + qcb[1]*qba[3]
0.736824293298044886
(gdb) printf "%.18f\n", qcb[1]*qba[0] - qcb[0]*qba[1] + qcb[3]*qba[2] + qcb[2]*qba[3]
-0.260654850643024127
(gdb) printf "%.18f\n", -qcb[0]*qba[0] - qcb[1]*qba[1] - qcb[2]*qba[2] + qcb[3]*qba[3]
0.011147182658310384
(gdb)

These errors accumulate and eventually builds up so much that the my simulation result is totally wrong when running under cygwin.

Thanks,

Linh

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

```

Index Nav: Message Nav: [Date Index] [Subject Index] [Author Index] [Thread Index] [Date Prev] [Date Next] [Thread Prev] [Thread Next]