19. ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ ВМЕСТО ЦЕЛЫХ ЧИСЕЛ
===============================================
19.1 Перемещение данных
-----------------------
Инструкции с плавающей точкой могут быть использованы для копирования 8 байт
одновременно:
FILD QWORD PTR [ESI] / FISTP QWORD PTR [EDI]
Этот метод перспективен только, если приемник в кеше. Оптимальный путь,
перемещать, на Pentium, данные в не кешированный блок:
TopOfLoop:
FILD QWORD PTR [ESI]
FILD QWORD PTR [ESI+8]
FXCH
FISTP QWORD PTR [EDI]
FISTP QWORD PTR [EDI+8]
ADD ESI,16
ADD EDI,16
DEC ECX
JNZ TopOfLoop
Источник и приемник, конечно, должны быть выравнены на 8. Большее время,
требуемое на исполнение инструкциями FILD и FISTP компенсируются тем, что
вашему циклу необходимо выполнить только половину итераций. Еще раз напоминаю,
этот метод быстрее только на Pentium и только если приемник не в кеше. На всех
других процессорах будет оптимальнее использовать REP MOVSD, или если ваш
процессор поддерживает MMX, то вы можете использовать MMX инструкции, для
копирования 8 байт одновременно.
19.2 Умножение целых чисел
--------------------------
Умножение чисел с плавающей точкой быстрее, чем умножение целых чисел на
Pentium без MMX, но время, затрачиваемое на конвертирование целого числа в
вещественное и конвертирование результата обратно больше, чем выигрыш от
такого умножения. Подобное положение распространяется и на другие процессоры.
Искушает использовать операции с плавающей точкой с некорректными операндами,
но некорректные операнды обрабатываются очень медленно, так что это не очень
хорошая идея!
19.3 Деление целых чисел
------------------------
Деление чисел с плавающей точкой не быстрее, чем деление целых чисел, но вы
можете использовать другие целочисленные операции (включая деление, но не
целочисленное умножение) пока сопроцессор занят делением.
См. раздел 17.9 для примера.
19.4 Преобразование двоичного к десятичному формату
---------------------------------------------------
Использование инструкции FBSTP является самым простым, хотя и не самым быстрым
способом, преобразовать двоичное число к десятичному формату.
Дальше
|