Some equations using exponents on Windows XP Professional 64-bit evaluate incorrectly, but can be computed correctly by splitting up the equation into multiple statements.
I apologize in advance if this turns out to be just a MinGW bug, but thought I'd start with gcc first. I am using MinGW GFortran with the following built-in specs. Target: x86_64-pc-mingw32 Configured with: ../gcc/configure --target=x86_64-pc-mingw32 --prefix=/c/buildbot/vista64-mingw32/mingw-x86/build/root --with-sysroot=/c/buildbot/vista64-mingw32/mingw-x86/build/root --disable-multilib --enable-languages=all,obj-c++ Thread model: win32 gcc version 4.4.0 20090110 (experimental) (GCC) Here is some sample code that demonstrates the problem: myfunc.f ------------------------------------------------------------ Subroutine myfunc(a,b,c,d,e,res1,res2) Real a,b,c,d,e Parameter (g = 273.15) res1 = a*(b/a)**((c-d-g)/(e-d)) res2 = (b/a)**((c-d-g)/(e-d)) res2 = res2 * a Return End Subroutine myfunc2(a,b,c,d,res1,res2) Real a,b,c,d,res1,res2 res1 = a*(b/c)**d res2 = (b/c)**d res2 = a * res2 Return End Subroutine myfunc3(a,b,c,d,e,f,g,h,i,res1,res2) Real a,b,c,d,e,f,g,h,i,res1,res2 res1 = a*((b/(b+c*(d-e)))**((f*g)/(h*i)))*100. res2 = ((b/(b+c*(d-e)))**((f*g)/(h*i)))*100. res2 = a*res2 Return End main.c ------------------------------------------------------ #include <stdio.h> extern void myfunc(float *a, float *b, float *c, float *d, float *e, float *res1, float *res2); extern void myfunc2(float *a, float *b, float *c, float *d, float *res1, float *res2); extern void myfunc3(float *a, float *b, float *c, float *d, float *e, float *f, float *g, float *h, float *i, float *res1, float *res2); int main( int argc, char *argv[] ) { float a,b,c,d,e,f,g,h,i,res1,res2; a=1000.0; b=850.0; c=143.204; d=30.5280; e=8.2351; res1 = 0; res2 = 0; myfunc(&a,&b,&c,&d,&e,&res1,&res2); printf("Function 1:\n--------------------\nresult 1: %f\nresult 2: %f\n\n",res1,res2); a=103780.0; b=253.13005; c=231.676270; d=-16.904803; myfunc2(&a,&b,&c,&d,&res1,&res2); printf("Function 2:\n--------------------\nresult 1: %f\nresult 2: %f\n\n",res1,res2); a=1513.25; b=238.149994; c=-16.500040; d=3.2; e=0; f=9.806650; g=20.964399; h=7614.320313; i=-0.1065; myfunc3(&a,&b,&c,&d,&e,&f,&g,&h,&i,&res1,&res2); printf("Function 3:\n--------------------\nresult 1: %f\nresult 2: %f\n\n",res1,res2); return 0; } -------------------------------------------- Compiled with the following options: -fno-uncerscoring -fno-range-check -W -std=f95 -- Summary: Some math expressions containing exponents fail on a Windows 64 build Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: blocker Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jonathan dot d dot wetherbee at saic dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40070