Я собираюсь поговорить о числах с плавающей точкой, а не о целочисленных значениях, потому что именно в этом и заключается технология.
Стандартный способ вычисления таких функций - использовать некоторую специальную логику, чтобы вы могли толькодолжны представлять функцию в некотором диапазоне [a, b], аппроксимировать ее рациональной функцией - один многочлен делится на другой, а затем исправлять все, что вам нужно было сделать, чтобы уменьшить диапазон.Источник exp (x) в http://www.netlib.org/fdlibm/e_exp.c, кажется, следует этому образцу.
Это дает вам приближение exp (x) в форме a (x) / b (x).Вы на самом деле хотите 1 / (1 + exp (-x)).Вы должны быть в состоянии изменить реализацию a (x) / b (x), чтобы заставить его выполнять b (-x) / (a (-x) + b (-x)), чтобы у вас было простоодна инструкция деления, внутри переставленной exp (x), вместо одной инструкции деления внутри и одной снаружи.
Это сэкономит вам кое-что, в зависимости от того, насколько дороже деление на вашей машине - это можетбыть заметным, если ваш внутренний цикл действительно на 90% вызывает логистическую функцию.Модель сокращения диапазона плюс рациональная аппроксимация настолько прочно укоренились, что я сомневаюсь, что вы будете делать намного лучше, не жертвуя при этом большой точностью, хотя, если вы прибегаете к целым числам, вы можете быть готовы к этому.
Смею сказать, что вы могли бы перенести это в мир фиксированной точки, если бы вы работали достаточно усердно.Боюсь, что я был бы склонен вернуться к линейной интерполяции между значениями в таблице, то есть предположить, что я не смог найти способ вывести логистическую функцию из внутреннего цикла.