Включение или отсутствие cmath приводит к тому, что файл math.h будет включен, строго определяется реализацией c. Однако оба они являются просто декларативными, и то, является ли включение одного из них одним и тем же кодом библиотеки объектов , является также спецификацией реализации c. Тем не менее, весьма вероятно, что реализация будет использовать тот же код, и часто math.h будет вложенным включением в.
cmath добавляет перегрузки для float
, long double
и целочисленных типов, тогда как в математике. h использует double
почти исключительно. Это может привести к более оптимальным реализациям, или это может быть просто приведение типа к функции библиотеки C - опять же, это спецификация реализации c.
, поскольку эта встроенная система очень чувствительна к изменение точности из вычислений.
Поведение может измениться, если у вас нет точного соглашения о типе с объявленными функциями math.h. Например, если у вас есть float
аргументы с неявным приведением к double
math.h аргументам, использование cmath может привести к использованию более подходящей перегрузки.
Поэтому я хотел бы знать, если cmath заимствует его реализации и оборачивается вокруг c ++ совместимого кода? Или у c ++ есть своя собственная реализация, отличная от?
Проверьте свою реализацию, протестируйте ее и убедитесь, что ваш код имеет правильное соглашение о типах, чтобы избежать использования перегрузок. Тем не менее, если вы сделаете это, не будет убедительного преимущества в использовании cmath - основное преимущество которого заключается в перегрузках для типов, отличных от double
, что приводит к потенциально более эффективному коду. Он потенциально имеет значительные преимущества в производительности, например, если у вашего процессора FPU одинарной точности или нет FPU, а вы используете float
для эффективности.
Лучшее решение - собрать и протестировать его - полностью. Так как это спецификация реализации c, вам придется протестировать ее для заданной c цепочки инструментов и цели, так как в спецификации языка или библиотеки не определено, как это должно быть сделано.