|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 16, 2003 15:03:02 · Поправил: Dr.Golova Есть кусочек кода: .xlok__:004493CA push ecx ; ecx == 11h .xlok__:004493CB or eax, ecx .xlok__:004493CD fild dword ptr [esp] .xlok__:004493D0 btr eax, 14h .xlok__:004493D4 push ecx ; ecx == 11h .xlok__:004493D5 shrd eax, ecx, 1Ch .xlok__:004493D9 fld real4 ptr [esp] .xlok__:004493DC not eax .xlok__:004493DE fsubrp st(1), st .xlok__:004493E0 dec eax .xlok__:004493E1 fistp dword ptr [esp] .xlok__:004493E4 dec eax .xlok__:004493E5 pop ecx ; ecx == 0xFFFFFFEF Как бы мне его переписать на C - как я не парился, всегда числа конвертятся в 80 битные вещественные, и соответсно в результате получается ноль, а не 0xFFFFFFEF :( |
|
|
Дата: Июл 16, 2003 17:19:01 У инвижуальных сей это вроде бы делает ключик /Op (Improve Float Consistency). Но он не у всех редакций есть, только Professional и Enterprise... |
|
|
Дата: Июл 17, 2003 02:37:12 так? int main()
{
int a;
a=0x11;
a=*(double*)&a-*(int*)&a;
...
}
А вот с "eax" я что-то не понял. |
|
|
Дата: Авг 1, 2003 19:06:58 ох, ошибка :( в строке a=*(double*)&a-*(int*)&a; вместо 'double' должно быть 'float', а то размер не совпадает: a=*(float*)&a-*(int*)&a; Извиняюсь. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.049 |