У меня есть функция в C, которая принимает и возвращает двойное число (и использует несколько двойных значений внутри). Есть ли хороший способ сделать вторую версию функции, точно такую же, только с float
вместо double
? Также следует обновить такие константы, как DBL_EPSILON
.
Я полагаю, что мог бы сделать это с помощью препроцессора, но это кажется неудобным (и, вероятно, сложным для отладки, если есть ошибка компиляции). Что рекомендуют лучшие практики? Я не могу представить, что я единственный, кому пришлось иметь дело с этим.
Изменить: я забыл, это stackoverflow, поэтому я не могу просто задать вопрос, я должен оправдаться. У меня есть код, который в этом случае очень чувствителен к точности; стоимость использования двойников, а не поплавков, составляет от 200% до 300%. До сих пор мне требовалась только двойная версия — когда она мне была нужна, я хотел как можно большей точности, независимо от необходимого времени (в этом приложении это был крошечный процент). Но теперь я нашел применение, которое чувствительно к скорости и не выигрывает от дополнительной точности. Я содрогнулся от своей первой мысли, которая заключалась в том, чтобы скопировать всю функцию и заменить типы. Затем я подумал, что экспертам в SO будет известен лучший подход, поэтому я разместил его здесь.