|
|
От: | Аноним | |
| Дата: | 26.08.10 12:26 | ||
| Оценка: | |||
float get_NaN(){
float ret=0;
unsigned char *p;
p=(unsigned char*)(&ret);
p[0]=0xff;
p[1]=0xff;
p[2]=0xff;
p[3]=0xff;
return ret;
}
int work(){
int ret=0;
float a1=0;
float a2;
a1=get_NaN();
a2=a1;
if(a1==a2) ret=1;
return ret;
}
int work1(){
int ret=0;
float a1=0;
a1=get_NaN();
if(a1<0.1) ret=1;
return ret;
}
int work2(){
int ret=0;
float a1=0;
float a2=0.1;
a1=get_NaN();
if(a1>a2) ret=1;
return ret;
}
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[]){
int ret;
ret=work();
ret=work1();
ret=work2();
return ret;
}
//---------------------------------------------------------------------------Падает он на строке return ret; в функции get_NaN(). Причем только при втором проходе (то есть при вызове этой функции из work1())---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EInvalidOp with message 'Invalid floating point operation'. Process stopped. Use Step or Run to continue.