Vskazka
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору akaGM Цитата: Не очень понимаю, к чему это, мб отстал от жизни, но полагал, что при умножении двух двух флоатов, сопроцессор переводит их в десятибайтные, перемножает, а уж потм возвращает то количество байтов, которое было вначале. Цитата: откуда здесь берутся промежуточные результаты, не учитывая "правостороннеравенственные"? | Грубо говоря A*B*C +D - действие машины может идти по следующим сценариям A,B - Загоняются в сопроцессор и перемножаются. Результат остается в стеке сопроцессора. Потом в сопроцессор загоняется число C и перемножается с тем результатом. и этот результат сохраняется в стеке сопроцессора, потом в сопроцессор загоняется число D, складывается с тем числом, которое сохранилось в сопроцессоре и результат уж выводится в память. A,B - Загоняются в сопроцессор и перемножаются. Результат сохраняется в памяти (8 байт) . Потом в сопроцессор загоняется число C и и получившийся временный результат умножения A*B. Перемножается и этот результат сохраняется в памяти. Потом в сопроцессор загоняется число D и это сохраненное в памяти тройное произведение, складываются и результат опять выводится в память. Так как формат чисел в памяти (double) -8 байт, а в сопроцессоре 10 байт, ясно, что может быть разница в последнем знаке. Или даже, при неудаче двух. Если вычисления пойдут по второму сценарию результат будет тот же, что и t=a*b t=t*c t=t+d при этом, если мне не изменяет память, тот же лахей, и последний насильно разбитый сценарий мог провести по первому, черпая T все время из сопроцессора, а не выгружая - загружая его бесперечь из памяти | Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 20:13 10-11-2009 | Исправлено: Vskazka, 20:19 10-11-2009 |
|