Article: Q65307
Product(s): See article
Version(s): 6.00 | 6.00
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | buglist6.00 | mspl13_c
Last Modified: 31-AUG-1990
When compiled with global register allocation optimization turned on,
the program produces the following error when executed:
run-time error M6110: MATH
- floating-point error: stack overflow
This error should not occur. This problem occurs in both DOS and OS/2
with either the emulator or 8087 math libraries.
You can work around the problem by doing the following:
1. Turn off global register allocation globally by not including the
/Oe switch on the compile line, or turn it off locally with the
#pragma optimize("e",off).
2. Compile with the /Op switch. This improves the accuracy of floating
point calculations, but also slows execution.
Sample Code
-----------
#include <malloc.h>
//#pragma optimize("e",off) //uncomment this line and no error occurs
void func(float *x1,float *y1,float *x2,float *y2,float *x3,float *y3,
unsigned size,float *xc1,float *yc1)
{
float tx,ty ;
while (size--)
{
//_asm nop //uncomment this line and no error occurs
tx = (*xc1 * *x1) - (*yc1 * *y1) ;
ty = (*xc1 * *y1++) + (*yc1 * *x1++) ;
*x3++ = (tx * *x2) - (ty * *y2) ;
*y3++ = (tx * *y2++) + (ty * *x2++) ;
}
}
void main(void )
{
float xx1[7],xx2[7],xx3[7],yy1[7],yy2[7],yy3[7] ;
float xn,yn ;
unsigned tsize = 7 ;
xn = 1 ;
yn = 0 ;
func (xx1,xx2,xx3,yy1,yy2,yy3,tsize,&xn,&yn) ;
}
Microsoft has confirmed this to be a problem with C version 6.00. We
are researching this problem and will post new information here as it
becomes available.