Я собираюсь отправить патч в стандартную библиотеку языка программирования D, который позволит оценивать большую часть std.math во время компиляции с использованием средств оценки функций во время компиляции языка. Оценка функции времени компиляции имеет несколько ограничений, наиболее важными из которых являются:
- Нельзя использовать язык ассемблера.
- Вы не можете вызвать код C или код, для которого источник недоступен.
Несколько функций std.math нарушают их, и необходимо писать версии во время компиляции. Где я могу получить информацию о хороших алгоритмах для вычисления таких вещей, как логарифмы, показатели, степени и триггерные функции? Я предпочитаю только высокоуровневые описания алгоритмов реальному коду по двум причинам:
Чтобы избежать юридической двусмысленности и необходимости заставить мой код выглядеть "достаточно отличным" от исходного кода, чтобы убедиться, что я владею авторским правом.
Я хочу простые переносимые алгоритмы. Меня не волнует микрооптимизация, если она хотя бы асимптотически эффективна.
Редактировать: Модель оценки функции времени компиляции D позволяет результатам с плавающей запятой, вычисленным во время компиляции, так или иначе отличаться от вычисленных во время выполнения, поэтому мне все равно, если мои алгоритмы времени компиляции не дают точно тот же результат, что и во время исполнения, если они не менее точны в значительной степени.