Разработать консольное приложение для вычисления значения функции. Предусмотреть ввод исходных данных с клавиатуры и вывод на экран исходных данных и результата вычислений 1 Задача 2 Задача Помогите сделать, буду очень благодарен
Код к задаче: «Разработать консольное приложение для вычисления значения функции»
Листинг программы
Console.Write(«Введите z «); int z = int.Parse(Console.ReadLine()); Console.Write(«Введите x «); int x = int.Parse(Console.ReadLine()); double function; if (z-5)< function = x*x +z; >else if (z<=-5)< function = 2.5*z; >else < function = (x*x*x +1.3)/z; >Console.WriteLine(«Значение функции content»>
6 голосов , оценка 3.833 из 5
Источник: studassistent.ru
Вычислимая функция
Вычислимые функции являются основными объектами изучения в теория вычислимости. Вычислимые функции являются формализованным аналогом интуитивного понятия алгоритмов в том смысле, что функция является вычислимой, если существует алгоритм, который может выполнять работу функции, т. Е. С учетом входных данных области определения функции. может вернуть соответствующий вывод. Вычислимые функции используются для обсуждения вычислимости без ссылки на какую-либо конкретную модель вычислений, такую как машины Тьюринга или регистровые машины. Однако любое определение должно ссылаться на некоторую конкретную модель вычислений, но все действительные определения дают один и тот же класс функций. Конкретные модели вычислимости, которые дают начало множеству вычислимых функций, — это вычислимые по Тьюрингу функции и μ-рекурсивные функции.
Как создать ВЫЧИСЛЯЕМЫЕ запросы в базе Access
. До точного определения вычислимой функции математики часто используется неформальный термин эффективно вычислимый. С тех пор этот термин стал отождествляться с вычислимыми функциями. Обратите внимание, что эффективная вычислимость этих функций не означает, что они могут быть эффективно вычислены (т. Е. Вычислены за разумный промежуток времени).
Фактически, для некоторых эффективно вычисляемых функций можно показать, что любой алгоритм, который их вычисляет, будет очень неэффективным в том смысле, что время работы алгоритма увеличивается экспоненциально (или даже сверхэкспоненциально ) с длиной входа. Поля допустимой вычислимости и вычислительной сложности изучают функции, которые могут быть вычислены эффективно.
Согласно тезису Черча – Тьюринга, вычислимые функции — это именно те функции, которые могут быть вычислены с использованием механического вычислительного устройства при неограниченном количестве времени и памяти. Эквивалентно, этот тезис утверждает, что функция вычислима тогда и только тогда, когда у нее есть алгоритм. Обратите внимание, что алгоритм в этом смысле понимается как последовательность шагов, которую может выполнить человек с неограниченным временем и неограниченным запасом ручки и бумаги.
Функции, вычисляемые по Тьюрингу
аксиомы Блюма можно использовать для определения абстрактной теории вычислительной сложности на множестве вычислимых функций. В теории сложности вычислений проблема определения сложности вычислимой функции известна как проблема функции.
Определение
Вычислимость функции — понятие неформальное. Один из способов описать это — сказать, что функция вычислима, если ее значение может быть получено с помощью эффективной процедуры. С большей строгостью функция f: N k → N ^ rightarrow mathbb > вычислима тогда и только тогда, когда существует является эффективной процедурой, которая для любого k- кортежа x > натуральных чисел даст значение f (x) )> . В соответствии с этим определением в оставшейся части статьи предполагается, что вычислимые функции принимают конечное число натуральных чисел в качестве аргументов и производят значение, которое является единственным натуральным числом.
В качестве эквивалента этому неформальному описанию существует несколько формальных математических определений. Класс вычислимых функций может быть определен во многих эквивалентных моделях вычислений, включая
- машины Тьюринга
- μ-рекурсивные функции
- Лямбда-исчисление
- Пост-машины (Пост-Тьюринга машины и машины тегов ).
- Регистрирующие машины
Хотя эти модели используют разные представления для функций, их входных и выходных данных, трансляции существуют между любыми двумя моделями, и поэтому каждый Модель описывает, по сути, один и тот же класс функций, что дает основание считать, что формальная вычислимость является одновременно естественной и не слишком узкой.
Например, можно формализовать вычислимые функции как μ-рекурсивные функции, которые являются частичными функциями, которые принимают конечные кортежи из натуральных чисел и возвращают одно натуральное число (как указано выше). Это наименьший класс частичных функций, который включает в себя функции константы, преемника и проекции, и является закрытым в рамках композиция, примитивная рекурсия и μ оператор.
Эквивалентно вычислимые функции могут быть формализованы как функции, которые могут быть вычислены идеализированным вычислительным агентом, таким как машина Тьюринга или регистровая машина. Формально говоря, частичная функция f: N k → N ^ rightarrow mathbb > может вычисляться тогда и только тогда, когда существует компьютерная программа со следующими свойствами:
- Если определен f (x) )> , то программа завершится при вводе x > со значением f (x) )> хранится в памяти компьютера.
- Если f (x) )> не определено, то программа никогда не завершается вход x > .
Характеристики вычислимых функций
Основная характеристика вычислимой функции состоит в том, что должна существовать конечная процедура (алгоритм ), рассказывающий, как вычислить функцию. Перечисленные выше модели вычислений дают разные интерпретации того, что такое процедура и как она используется, но эти интерпретации имеют много общих свойств. Тот факт, что эти модели предоставляют эквивалентные классы вычислимых функций, проистекает из того факта, что каждая модель способна читать и имитировать процедуру для любой из других моделей, так же как компилятор может читать инструкции за одну компьютерный язык и издает инструкции на другом языке.
Enderton [1977] дает следующие характеристики процедуры для вычисления вычислимой функции; аналогичные характеристики были даны Тьюрингом [1936], Роджерсом [1967] и другими.
- «Для процедуры должны быть точные инструкции (т.е. программа) конечной длины». Таким образом, каждая вычислимая функция должна иметь конечную программу, полностью описывающую, как функция должна быть вычислена. Можно вычислить функцию, просто следуя инструкциям; не требуется никаких предположений или специального понимания.
- «Если процедуре задан кортеж из k x в области f, то после конечного числа дискретных шагов процедура должна завершиться и произвести f (x ). » Интуитивно процедура выполняется шаг за шагом с определенным правилом, описывающим, что делать на каждом этапе расчета. Только конечное число шагов может быть выполнено до того, как значение функции будет возвращено.
- «Если процедуре задан кортеж из k x, который не находится в области f, тогда процедура может продолжаться бесконечно, никогда не останавливаясь, или может застрять в какой-то момент (т. е. одна из ее инструкций не может быть выполнена), но она не должна претендовать на получение значения для f на x . » Таким образом, если значение для f (x ) когда-либо найдено, оно должно быть правильным значением. Вычислительному агенту нет необходимости отличать правильные результаты от неправильных, потому что процедура определяется как правильная тогда и только тогда, когда она дает результат.
Далее Эндертон перечисляет несколько пояснений этих трех требований процедуры для вычислимая функция:
- Теоретически процедура должна работать для произвольно больших аргументов. Не предполагается, что аргументы меньше, чем, например, количество атомов на Земле.
- Процедура должна останавливаться после конечного числа шагов, чтобы получить результат, но это может занять произвольно много шаги перед остановкой. Не предполагается никаких ограничений по времени.
- Хотя процедура может использовать только конечный объем памяти во время успешного вычисления, нет никаких ограничений на количество используемого пространства. Предполагается, что дополнительное пространство для хранения может быть предоставлено процедуре всякий раз, когда процедура этого запрашивает.
Подводя итог, на основе этого представления функция является вычислимой, если: (a) дан вход из ее домена, возможно, полагаясь на неограниченный пространство памяти, он может выдавать соответствующий результат, следуя процедуре (программе, алгоритму), которая формируется конечным числом точных однозначных инструкций; (б) он возвращает такой результат (остановки) за конечное число шагов; и (c) если задан ввод, не входящий в его домен, он либо никогда не останавливается, либо застревает.
Поле вычислительной сложности изучает функции с заданными границами времени и / или пространства, разрешенными для успешного вычисления.
Вычислимые множества и отношения
Набор A натуральных чисел называется вычислимым (синонимы: рекурсивный, разрешимая ), если существует вычислимая общая функция f такая, что для любого натурального числа n , f ( n ) = 1, если n равно в A и f ( n ) = 0, если n не входит в A .
Набор натуральных чисел называется вычислимо перечислимым (синонимы: рекурсивно перечислимый, полуразрешимый ), если существует вычислимая функция f такая, что для каждого числа n , f ( n ) определяется тогда и только тогда, когда n находится в наборе. Таким образом, набор вычислимо перечислим тогда и только тогда, когда он является областью определения некоторой вычислимой функции. Слово enumerable используется потому, что следующие значения эквивалентны для непустого подмножества B натуральных чисел:
- B — это область вычислимой функции.
- B — это диапазон полной вычислимой функции. Если B бесконечно, то функцию можно считать инъективной.
Если набор B является диапазоном функции f, тогда функцию можно рассматривать как перечисление B , потому что список f (0), f (1). будет включать каждый элемент B .
Поскольку каждое конечное отношение в натуральных числах может быть отождествленные с соответствующим набором конечных последовательностей натуральных чисел, понятия вычислимого отношения и вычислимо перечислимого отношения могут быть определены из их аналогов для множеств.
Формальные языки
В теории вычислимости в информатике принято рассматривать формальные языки. алфавит — произвольный набор. Слово в алфавите — это конечная последовательность символов алфавита; один и тот же символ может использоваться более одного раза. Например, двоичные строки — это в точности слова в алфавите . язык — это подмножество набора всех слов фиксированного алфавита. Например, набор всех двоичных строк, содержащих ровно 3 единицы, представляет собой язык над двоичным алфавитом.
Ключевым свойством формального языка является уровень сложности, необходимый для определения того, присутствует ли данное слово в языке. Должна быть разработана некоторая система кодирования, позволяющая вычислимой функции принимать произвольное слово на языке в качестве входных; это обычно считается рутиной. Язык называется вычислимым (синонимы: рекурсивный, разрешимый ), если существует вычислимая функция f такая, что для каждого слова w больше алфавит, f ( w ) = 1, если слово на языке и f ( w ) = 0, если слово не на языке. Таким образом, язык является вычислимым, если существует процедура, которая может правильно определить, есть ли в языке произвольные слова.
Язык является вычислимо перечислимым (синонимы: рекурсивно перечислимым, полуразрешимым ), если существует вычислимая функция f такая, что f ( w ) определяется тогда и только тогда, когда слово w присутствует в языке. Термин перечислимый имеет ту же этимологию, что и в вычислимо перечислимых наборах натуральных чисел.
Примеры
Следующие функции вычислимы:
- Каждая функция с конечной областью ; например, любая конечная последовательность натуральных чисел.
- Каждая постоянная функция f: N→ N, f (n 1. n k): = n.
- Сложение f: N→ N, f (n 1,n2): = n 1 + n 2
- наибольший общий делитель двух чисел
- A коэффициент Безу двух чисел
- Наименьший простой множитель числа
Если f и g вычислимы, то вычислимы: f + g, f * g, f ∘ g , если f равно унарный, max (f, g), min (f, g), arg max и многие другие комбинации.
Следующие примеры показывают, что функция может быть вычислимой, хотя неизвестно, какой алгоритм ее вычисляет.
-
Функция f такая, что f (n) = 1, если есть последовательность из не менее n последовательных пятерок в десятичном разложении π, и f (n) = 0 в противном случае, является вычислимой. (Функция f является либо функцией константы 1, которая является вычислимой, либо существует k такое, что f (n) = 1, если n f (n 1, n 2. nk) , n_ . n_ )> можно вычислить, следуя определению в обратном порядке, итеративно, и после конечного числа итераций (как можно легко доказать) достигается константа.
Обратное неверно, так как не каждая доказуемо итоговая функция является примитивно рекурсивной. В самом деле, можно перечислить все примитивные рекурсивные функции и определить функцию en так, что для всех n m: en (n, m) = f n (m), где f n — n-я примитивная рекурсивная функция (для k-арных функций будет установлено значение f n (m, m. m)). Теперь, g (n) = en (n, n) +1 доказуемо полное, но не примитивно рекурсивное, с помощью аргумента диагонализация : если бы был aj такой, что g = f j, мы получили бы g (j) = en (j, j) +1 = f j (j) + 1 = g (j) +1; противоречие. (Гёделевские числа всех примитивно рекурсивных функций могут быть перечислены с помощью примитивно рекурсивной функции, хотя значения примитивных рекурсивных функций не могут.)
Одна такая функция, которая доказуема всего, но не примитивно рекурсивной является функция Аккермана : поскольку она определена рекурсивно, действительно легко доказать ее вычислимость (однако аналогичный аргумент диагонализации также может быть построен для всех функций, определенных рекурсивным определением; таким образом, существует являются доказуемыми полными функциями, которые не могут быть определены рекурсивно).
Суммарные функции, которые не являются доказуемо итоговыми
В надежной системе доказательств каждая доказуемая итоговая функция действительно является итоговой, но обратное неверно: в каждом первом — Чтобы упорядочить систему доказательства, которая является достаточно сильной и надежной (включая арифметику Пеано), можно доказать (в другой системе доказательств) существование полных функций, которые не могут быть доказаны как полные в системе доказательств.
Если все вычислимые функции перечисляются с помощью машин Тьюринга, которые их создают, то приведенное выше утверждение может быть показано, если система доказательства работает, с помощью аргумента диагонализации, аналогичного тому, который использовался выше, с использованием перечисления доказуемо суммарные функции, данные ранее. Один использует машину Тьюринга, которая перечисляет соответствующие доказательства, и для каждого ввода n вызывает f n (n) (где f n — n-я функция по этому перечислению), вызывая Машина Тьюринга, вычисляющая его согласно n-му доказательству. Такая машина Тьюринга гарантированно остановится, если система доказательства работоспособна.
Невычислимые функции и неразрешимые проблемы
Каждая вычислимая функция имеет конечную процедуру, дающую явные, однозначные инструкции о том, как ее вычислить. Кроме того, эта процедура должна быть закодирована в конечном алфавите, используемом вычислительной моделью, поэтому существует только счетно вычислимых функций. Например, функции могут быть закодированы с использованием строки битов (алфавит Σ = ).
Действительные числа не поддаются исчислению, поэтому большинство действительных чисел не поддаются вычислению. См. вычислимое число. Набор конечных функций для натуральных чисел неисчислим, поэтому большинство из них не вычислимы. Конкретными примерами таких функций являются Занят бобер, сложность Колмогорова или любая функция, которая выводит цифры невычислимого числа, например, константа Чейтина.
Аналогично, большинство подмножеств натуральных чисел не вычислимы. Задача остановки была первым таким набором, который был создан. Entscheidungsproblem, предложенная Дэвидом Гильбертом, спрашивает, существует ли эффективная процедура для определения того, какие математические утверждения (закодированные как натуральные числа) верны. Тьюринг и Черч независимо друг от друга показали в 1930-х годах, что этот набор натуральных чисел не вычислим. Согласно тезису Чёрча – Тьюринга, не существует эффективной процедуры (с алгоритмом), которая могла бы выполнять эти вычисления.
Расширения вычислимости
Относительная вычислимость
Понятие вычислимости функции может быть релятивизировано до произвольного набора из натуральные числа А. Функция f определяется как вычислимая в A (эквивалентно A-вычислима или вычислима относительно A ), когда она удовлетворяет определению вычислимой функции с модификациями разрешение доступа к A как к оракулу. Как и в случае с концепцией вычислимой функции, относительной вычислимости можно дать эквивалентные определения во многих различных моделях вычислений. Обычно это достигается путем дополнения модели вычислений дополнительной примитивной операцией, которая спрашивает, является ли данное целое число членом A. Мы также можем говорить о том, что f вычислимо в g, отождествляя g с его графом.
Теория высшей рекурсии
Гиперарифметическая теория изучает те множества, которые могут быть вычислены из вычислимого порядкового числа итераций скачка Тьюринга пустого задавать. Это эквивалентно множествам, определяемым как универсальной, так и экзистенциальной формулой на языке арифметики второго порядка, и некоторым моделям Hypercomputation. Были изучены даже более общие теории рекурсии, такие как теория E-рекурсии, в которой любой набор может использоваться в качестве аргумента для E-рекурсивной функции.
Гипервычисление
Хотя тезис Черча – Тьюринга утверждает, что вычислимые функции включают в себя все функции с алгоритмами, можно рассмотреть более широкие классы функций, которые ослабляют требования, которыми должны обладать алгоритмы. Область Hypercomputation изучает модели вычислений, которые выходят за рамки обычных вычислений Тьюринга.
См. Также
- Вычислимое число
- Эффективный метод
- Теория вычислений
- Теория рекурсии
- Степень Тьюринга
- Арифметическая иерархия
- Гипервычисление
- Суперрекурсивный алгоритм
- Полувычислимая функция
Ссылки
- Катленд, Найджел. Вычислимость. Cambridge University Press, 1980.
- Эндертон, Х.Б. Элементы теории рекурсии. Справочник по математической логике (Северная Голландия, 1977), стр. 527–566.
- Роджерс, Х. Теория рекурсивных функций и эффективных вычислений (МакГроу – Хилл, 1967).
- Тьюринг, А. (1937), О вычислимых числах, с приложением к Entscheidungsproblem. Труды Лондонского математического общества, серия 2, том 42 (1937), стр.230–265. Перепечатано в M. Davis (ed.), The Undecidable, Raven Press, Hewlett, NY, 1965.
Источник: alphapedia.ru
Как быстро вычисляются логарифм и экспонента в компьютере?
Сегодняшняя статья посвящена методам быстрого приближенного вычисления двоичного логарифма и экспоненты/степеней двойки. Не все задумывались, как именно реализовано вычисление нелинейных математических функций в компьютере, который вообще-то умеет складывать и умножать, но не вычислять синусы или гиперболические тангенсы. Из школьных институтских времен вспоминаются ряды Тейлора, приближающие функцию полиномом в окрестности заданной точки, или интерполяционные полиномы Лагранжа, но как добиться действительно высокой точности приближения? А можно ли эти имплементации ускорить? Постараемся сегодня приоткрыть завесу тайны.
Для начала нужно вспомнить, как устроен формат вещественных чисел.
1. Вещественная арифметика
Для представления вещественных чисел в компьютере наиболее широко употребляются форматы данных, определенные стандартом арифметики с плавающей точкой IEEE 754. Этот стандарт был разработан Институтом инженеров электротехники и электроники (IEEE) в 1985 году, а затем обновлен в 2008 и 2019 годах. Его использование обеспечивает одинаковые результаты вычислений для программных, аппаратных или комбинированных реализаций вещественной арифметики, а также предоставляет единый формат ошибок, не привязанный к конкретной реализации.
Вещественные числа в двоичных форматах из стандарта IEEE 754 состоят из 3 упорядоченных полей:
- 1-битный знак числа S,
- w-битовая сдвинутая экспонента или порядок
- (t = p-1)-битовая мантисса где – двоичные разряды мантиссы, причем лидирующий разряд неявным образом закодирован в экспоненте. Вместе они составляют (w+p)-битовое число, как показано на Рис. 1.
Вещественное число может принимать следующие значения:
- NaN – не-числовое значение. При этом и , причем значение бита определяет дальнейшие действия: продолжение вычислений или сигнал об ошибке.
- Бесконечность. , когда и .
- Нормализованное число. , когда .
- Денормализованное число. , где – минимальное значение . Задается с помощью и .
- Нулевое значение. Если и , тогда .
Отметим, что денормализованные числа не превышают по абсолютному значению минимальное нормализованное число.
Как вы знаете, мы в Smart Engines занимаемся системами распознавания и обычно имеем дело с изображениями. В задачах обработки изображений или машинного обучения чаще всего используются 32-битные вещественные числа, поэтому дальнейшие примеры приведены для него. Это привычный С++ тип данных float, который называется binary32 согласно IEEE 754.
Он использует следующий набор параметров: . Более того, мы дополнительно упростим себе задачу, заметив, что денормализованные числа нам нужны крайне редко и мы ничего не потеряем, если будем считать их нулевыми. Это можно сделать, изменив флаги в управляющем регистре вещественной арифметики на конкретной платформе. Например, на x86_64 с вещественной арифметикой в SSE-режиме это регистр MXCSR и флаги DAZ (denormals-are-zero) and FTZ (flush-to-zero), которые можно установить с помощью интринсиков SSE.
2. Вычисление двоичного логарифма
2.1. Точное вычисление
В качестве примера мы рассмотрим точную реализацию двоичного логарифма для типа данных float из Cephes mathematical library [1], разработанной в 80-е Стивеном Л. Мошиером (Stephen L. Moshier) и позднее ставшей частью многих библиотек и пакетов для научных вычислений, например, SciPy.
И вот что там можно увидеть:
/* The argument is separated into its exponent and fractional * parts. If the exponent is between -1 and +1, the base e * logarithm of the fraction is approximated by * * log(1+x) = x — 0.5 x**2 + x**3 P(x)/Q(x). * * Otherwise, setting z = 2(x-1)/(x+1), * * log(x) = z + z**3 P(z)/Q(z). * * * * ACCURACY: * * Relative error: * arithmetic domain # trials peak rms * IEEE exp(+-88) 100000 1.1e-7 2.4e-8 * IEEE 0.5, 2.0 100000 1.1e-7 3.0e-8 */ /* Cephes Math Library Release 2.2: June, 1992 Copyright 1984, 1992 by Stephen L. Moshier Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */
То есть, используется две аппроксимации для диапазона аргумента возле нуля и остальной числовой прямой, каждая из которых представляет собой аппроксимацию Паде – рациональную функцию, представляющую собой частное двух полиномов. В данном случае полином Q(x) единичный, а P(x) содержит 9 коэффициентов.
2.2. Полиномиальное приближение
Что делают математики, когда хочется вычислить что-то сложное побыстрее? Разумеется, они пытаются приблизить это что-то более простой структурой. Поэтому мы рассмотрели относительно простую полиномиальную аппроксимацию двоичного логарифма.
Рассмотрим вещественное число :
Это означает, что необходимо приблизить для .
Полиномиальная аппроксимация 5-го порядка выглядит следующим образом:
Для определения коэффициентов составим систему линейных уравнений: в трех точках 0, 0.5, 1 значения должны быть равны значениям , а значения – значениям . В результате ее численного решения были получены значения Максимальная ошибка аппроксимации составила около на промежуткеМы хотели использовать эту аппроксимацию в биполярных морфологических нейронных сетях, поэтому целевой диапазон был именно таким.
Эта аппроксимация использует всего 5 умножений и 6 сложений при вычислении с помощью схемы Горнера (включая вычитание, чтобы получить ), если считать, что доступ к битам числа для получения значений экспоненты и мантиссы не требует дополнительного времени.
Хорошо? В принципе, да. Но можно ли еще быстрее? Оказывается, что да.
2.3. Аппроксимация Митчелла
Пожалуй самой вычислительно-эффективной аппроксимацией двоичного логарифма является аппроксимация, предложенная Дж. Митчеллом [2].
Он предложил использовать первый член ряда Маклорена чтобы аппроксимировать :
Таким образом, вычислительная сложность этой аппроксимации составляет всего две операции сложения/вычитания (включая вычитание, чтобы получить ).
Эта аппроксимация будет кусочно-линейной, причем концы каждого отрезка расположены в точках, равных степеням двойки. Максимальное по абсолютной величине отклонение от точной функции двоичного логарифма можно определить аналитическим путем для каждого промежутка, например, на промежуткеоно составляет .
На Рис. 2 показано сравнение различных реализаций двоичного логарифма. Можно видеть, что наша тривиальная полиномиальная аппроксимация обеспечивает хорошее приближение только на целевом интервале, а при больших значениях аргумента значительно отклоняется от логарифма. При этом с качественной точки зрения аппроксимация Митчелла ведёт себя гораздо лучше, хотя и имеет большую погрешность на .
3. Вычисление
На самом деле, экспонента и возведение в степень вычисляются практически одинаково:
Стандарт IEEE 754 оперирует двоичным представлением числа, поэтому удобнее всего перейти к возведению в степень именно двойки.
3.1. Точное вычисление
Покажем, какая аппроксимация используется в Cephes:
/* Returns 2 raised to the x power. * * Range reduction is accomplished by separating the argument * into an integer k and fraction f such that * x k f * 2 = 2 2. * * A polynomial approximates 2**x in the basic range [-0.5, 0.5]. * * * ACCURACY: * * Relative error: * arithmetic domain # trials peak rms * IEEE -127,+127 100000 1.7e-7 2.8e-8 */
То есть, сначала выделяется целая часть . Так как нормализованное вещественное число записывается следующим образом:
для вычисления , где – целое, необходимо просто записать в поле экспоненты, то есть:
где – непосредственное представление вещественного числа. Напомним, что – это константа, определяемая типом данных и равная 127 для binary32. Для приближения дробной части в данном случае использовался полином 5 степени.
Кроме того, современные процессоры x86_64 могут включать в себя специальные инструкции для быстрого вычисления экспоненты, как, например, процессоры Intel [3]. При этом используется таблица предподсчитанных значений и полиномиальная аппроксимация второго порядка, а значит ее сложность составляет 3 операции сложения и 3 операции умножения, не считая операции доступа по индексу таблицы. Относительная ошибка такой аппроксимации меньше , то есть она дает точные результаты при вычислении в типе binary32.
3.2. Аппоксимация Шраудольфа
В 1999 году Н. Шраудольф предложил крайне эффективную для вычисления аппроксимацию экспоненциальной функции [3], основанную на структуре двоичных форматов IEEE 754 для представления вещественных чисел. В его работе рассмотрены данные типа binary64 или double, однако предложенный подход можно легко распространить на binary32, что мы сейчас и сделаем.
Нормализованное вещественное число записывается следующим образом:
Как возводить 2 в целую степень, мы уже знаем. Оказывается, подобное можно провернуть и для вещественного . Для этого умножим его на , преобразуем к целому, а затем прибавим . При этом младшие разряды такого числа будут ненулевыми и осуществят линейную интерполяцию между соседними целыми числами, для которых результат окажется точным (разумеется, пока не произошло переполнение). И последний штрих: для более точного в среднем приближения можно добавить поправочный коэффициент.
В результате аппроксимация Шраудольфа имеет вид:
где – непосредственное представление вещественного числа, а – поправочный коэффициент, взятый равным 486411.
Эта аппроксимация использует одно целочисленное сложение, одно вещественное умножение и одно преобразование типа вещественного типа в целое число. Максимальное абсолютное отклонение от точной экспоненциальной функции на полуинтервале было определено численно и составило 0.05798 (см. Рис. 3).
Экспериментальные результаты
В Таблице 1 приведены оценки точности каждой реализации и экспериментально измеренное время работы для 32-битных вещественных чисел (усредненное время на 1 операцию).
Источник: habr.com