Инструкция FYL2XP1 - PullRequest
       34

Инструкция FYL2XP1

0 голосов
/ 10 октября 2018

Мне интересно, почему инструкция FYL2XP1 для архитектуры x86 вычисляет именно математическую формулу y · log 2 ( x + 1).

Что особенного в этой формуле?

1 Ответ

0 голосов
/ 10 октября 2018

Операнд y обычно является константой времени компиляции, на данный момент забудьте о x + 1.

Поскольку log_b(x) = log_b(2) * log_2(x) инструкция позволяет вычислять логарифм в любом основании x + 1.
Обратите внимание, что log_b(2) является константой, поскольку редко требуется вычислять логарифм со степенью свободыв базе.

FYL2XP1 и FYL2X являются единственными двумя инструкциями x87, которые вычисляют логарифм.
Если бы логарифм был алгебраической функцией, то одной инструкции было бы достаточно, но, поскольку она трансцендентна, Intel предоставила две версии.

FYL2X работает на полном домене логарифма, но он не совсем точен в этом полном диапазоне, особенно для очень малых значений x (вероятно, медленнее, я думаю, что он должен делать диапазонсокращения, используйте усеченное расширение Тейлора или приближение Паде, а затем улучшайте точность с помощью поиска в таблице).

FYL2XP1 вместо этого работает только для ввода в небольшом диапазоне ± (1 - sqrt (2) ⁄ 2).
Это должно быть быстрее (без уменьшения диапазона) и, что более важно, для данного входного диапазона используемый метод аппроксимации должен иметь точность, равную или превышающую 80-битную точность с плавающей запятой x87.

Эта инструкция обеспечивает оптимальную точность для значений эпсилона [значения в регистре ST (0)], близких к 0. Для небольших значений эпсилона (ε) более значимые цифры можно сохранить с помощьюинструкции FYL2XP1, чем при использовании (ε + 1) в качестве аргумента инструкции FYL2X.

@ Комментарий Mysticial - это точка на :
Алгоритм, используемый FYL2X, вероятно, использует после всех других необходимых шагов формулу аппроксимации для log(x + 1).
Чтобы преобразовать это в формулу для log(x), вход должен быть вычтен на единицу.Операция x - 1 потеряет точность, если x очень мало (поскольку большая разница в показателях двух чисел сместит большинство цифр x вправо).
FYL2XP1не сделает x - 1 и не потеряет точность.

...