FPU проблемка..
От: Аноним  
Дата: 13.11.06 19:31
Оценка:
Есть два дизасмовых листинга (первый .ехе файл, второй .dll):
CODE:00444F50 var_C= dword ptr -0Ch
...
CODE:00444FAF fild    [ebp+var_C]   ; [ebp+var_C] = 00047E0  
CODE:00444FB2 fmul    ds:dbl_446A80
...
DATA:00446A80 dbl_446A80 dq 7.26

и

CODE:00D94F24 var_88= dword ptr -88
...
CODE:00D95D5B fild    [ebp+var_88]  ; [ebp+var_88] = 00047E0
CODE:00D95D61 fmul    ds:dbl_DA64F
...
DATA:00DA64FC dbl_DA64FC dq 7.26

Если в дебагере посмотреть на значения регистра ST0, то после выполнения первого листинга туда загружается
1.3358399999999999608e5, а после второго 1.33584e5!

Значения, по-сути, одинаковые, отличия лишь в представлении.. Но учитывая, что в моём случае это критично, хотелось бы
узнать возможные причины этой разницы? Тип операндов совпадает, значения и сам код тоже.. Что же тогда?

Единственное, видное мне, отличие — второй код выполняется в dll, но каким местом это может влиять — ума не приложу..

Спасибо!
Re: FPU проблемка..
От: Сергей Мухин Россия  
Дата: 13.11.06 21:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если в дебагере посмотреть на значения регистра ST0, то после выполнения первого листинга туда загружается

А>1.3358399999999999608e5, а после второго 1.33584e5!


А>Единственное, видное мне, отличие — второй код выполняется в dll, но каким местом это может влиять — ума не приложу..


и не влияет.

посмотри ДО выполнения fmul: 1) регистр st0 2) флаги FPU (там округление может выставлено по разному) 3) память по операнду fmul
отладчик (а то он может округлять) один и тот же? коды команд fild & fmul одинаковые? мб в одном случае 8 байтовое, во втором 4х.
---
С уважением,
Сергей Мухин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.