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