Habr<p>[Перевод] Ни одна реализация элементарных функций не соответствует стандарту IEEE 754</p><p>Введённый в 1985 году стандарт IEEE-754 для чисел с плавающей запятой был предназначен для решения проблемы разнородности реализаций чисел с плавающей запятой, мешавших портируемости кода, а также для повышения стабильности между платформами. Он получил широкое применение и многократно пересматривался в течение прошедших лет. Если вы когда-нибудь работали с любыми вещественными числами в своих приложениях, то они, вероятно, отвечали этому стандарту. Моя работа в течение последнего года заключалась в анализе погрешности различных математических функций, накопления этой погрешности и способов её уменьшения при помощи различных программных паттернов. Одной из исследованных мной тем были базовые математические функции, используемые в функциях активации нейронных сетей, а также способы их аппроксимации для повышения производительности . В процессе работы нам пришлось столкнуться с противодействием со стороны людей, активно стремящихся к корректной реализации математических функций и к соответствию их стандартам, в частности, к соблюдению обеспечения корректности одной наименее значимой единицы измерения (unit in last place, ULP) для элементарных функций. Я был заинтересован в дальнейшей работе по аппроксимации этих функций, поэтому приступил к исследованию того, каким образом они гарантируют корректность, и если они корректны только на 1 ULP, то где располагаются ошибки в области определения функции. В процессе изучения я обнаружил, что ни одна из популярных математических библиотек, используемых во множестве сфер вычислений, на самом деле не выполняет корректное округление в соответствии с требованиями любой версии IEEE 754 после первой редакции 1985 года.</p><p><a href="https://habr.com/ru/companies/ruvds/articles/881698/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ruvds/ar</span><span class="invisible">ticles/881698/</span></a></p><p><a href="https://zhub.link/tags/%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>числа_с_плавающей_запятой</span></a> <a href="https://zhub.link/tags/floating_point" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>floating_point</span></a> <a href="https://zhub.link/tags/ieee_754" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ieee_754</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%B0%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>плавающая_запятая</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B0%D1%8F_%D1%82%D0%BE%D1%87%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>плавающая_точка</span></a> <a href="https://zhub.link/tags/%D0%BF%D0%BE%D0%B3%D1%80%D0%B5%D1%88%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>погрешности_округления</span></a> <a href="https://zhub.link/tags/fpu" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>fpu</span></a> <a href="https://zhub.link/tags/ruvds_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ruvds_статьи</span></a></p>