Оскільки це CS, а не Stackoverflow, я припускаю, що ви задаєте питання про числовий аналіз та (щоб все було просто) IEEE-754 з плаваючою точкою. У такому випадку відповідь на ваше запитання частково залежить від того, що ви маєте на увазі під "легше", а частково від деталей системи.
У жодному із сучасних процесорів, про які я знаю, немає вбудованої інструкції, яка б виконувала саме те, що ви очікували, або для операції (яку ми далі назвемо , її звичайна назва в С), або ( ). Вони реалізовані за допомогою функцій бібліотеки.2 xexexp
2xexp2
Як і у випадку з усіма числовими методами трансцендентальних операцій, слід врахувати кілька особливих випадків:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Однак є ще одна річ, яка робить проблему трохи менш складною: корисний домен зовсім невеликий. Для binary32 підтоки, exp(x)
якщо або близько того, і переповнення, якщо або близько того. Незвично для трансцендентних операцій, ми також можемо ігнорувати регістр субнормального, так як нічим НЕ відрізняються від , якщо субнормального. Все вищезазначене також стосується, за винятком того, що домен дещо інший.x > 88.7x<−104x>88.7exp(x)
1.0
x
exp2
Ваша інтуїція права в тому, що більшість реалізацій обчислює . Однак вартість цього множення на тривіальна порівняно з рештою обчислень . Типовий метод використовує попередньо обчислену таблицю з елементами :1ex=2x/ln2 К1ln2exp2
K
exp2(x)=2n×T[j]×P(y)
де - ціла частина , таблиця містить значення для всіх в діапазоні , а - деяке поліноміальне наближення до (кватерний достатній для двійкового32 ) в діапазоні . частина дешева, так як це просто маніпулюючи показник. - таблиця пошуку. Тож , швидше за все, буде дорогою частиною операції.x T 2 j / K j [ 0 , K ) P 2 x [ 0 , 1nxT2j/Kj[0,K)P2x2nTP[0,1K)2nTP
Я повинен зазначити для повноти, що FPU Intel x86 включає в себе інструкцію під назвою f2xm1
, яка обчислює для у діапазоні . Однак на сучасному процесорі це досить дорога та непрофільна інструкція, і ви сильно не відмовляєтесь від її використання. Як справедливо зазначає Посібник з оптимізації Intel Розділ 3.8.5:х [ - 1 , 1 ]2x−1x[−1,1]
Хоча x87 підтримує трансцендентні інструкції, у багатьох випадках реалізація програм трансцендентальної бібліотеки може бути швидшою.
Редагувати: У коментарях було зазначено, що я повинен пояснити деякі нові термінології, які використовуються в IEEE 754-2008. Частина мови змінилася з 1985 і 1987 років, і більшість людей набагато більше знайомі зі старим жаргоном.
Терміни "binary32" та "binary64" - це нові назви для 32-розрядних та 64-бітних двійкових чисел з плаваючою комою, які старий стандарт називав відповідно "одиночний" та "подвійний".
Термін "субнормальне число" замінює попередній термін "деннормальне число" або "денормальне число" .