读书人

中奖了发现VC6.0惊天大bug,该如何解

发布时间: 2012-01-14 20:02:35 作者: rapoo

中奖了,发现VC6.0惊天大bug
float dTemp = 5.1*pow(10,2);
long lTemp = dTemp;
调试发现lTemp值为509

float dTemp = 5.1*pow(10,2);
float dTemp2 = 100.0;
long lTemp = dTemp;
调试发现lTemp值为510


[解决办法]
float dTemp = 5.1*pow(10,2);
long lTemp = dTemp;

00411D28 push 40000000h
00411D2D push 0
00411D2F push 40240000h
00411D34 push 0
00411D36 call _pow (00401129)
00411D3B add esp,10h
00411D3E fmul qword ptr [__real@8@4001a333333333333000 (00428020)]
00411D44 fst dword ptr [ebp-4]
00411D47 call __ftol (00401418)

=================================================================================
float dTemp = 5.1*pow(10,2);
float dTemp2 = 100.0;
long lTemp = dTemp;

00411D28 push 40000000h
00411D2D push 0
00411D2F push 40240000h
00411D34 push 0
00411D36 call _pow (00401129)
00411D3B add esp,10h
00411D3E fmul qword ptr [__real@8@4001a333333333333000 (00428020)]
00411D44 fstp dword ptr [ebp-4]
00411D47 mov dword ptr [ebp-8],42C80000h
00411D4E fld dword ptr [ebp-4]
00411D51 call __ftol (00401418)


=================================================================================
其中:

__ftol:
00401418 push ebp
00401419 mov ebp,esp
0040141B add esp,0F4h
0040141E wait
0040141F fnstcw word ptr [ebp-2]
00401422 wait
00401423 mov ax,word ptr [ebp-2]
00401427 or ah,0Ch
0040142A mov word ptr [ebp-4],ax
0040142E fldcw word ptr [ebp-4]
00401431 fistp qword ptr [ebp-0Ch]
00401434 fldcw word ptr [ebp-2]
00401437 mov eax,dword ptr [ebp-0Ch]
0040143A mov edx,dword ptr [ebp-8]
0040143D leave
0040143E ret


读书人网 >VC/MFC

热点推荐