В стандарте C ++ функции математической библиотеки определены в двух заголовках:
<cmath>
содержит их в пространстве имен std
(например, std::sin
), а
<math.h>
содержит их в глобальном пространстве имен (поэтому просто sin
).
Между ними есть и другие различия: в то время как <math.h>
содержит все математические функции C с разными именами для разных типов, например
double sin(double);
float sinf(float);
long double sinl(long double);
и т. Д., <cmath>
содержит перегруженные функции, такие как
namespace std {
double sin(double);
float sin(float);
long double sin(long double);
}
и т. Д.(Библиотеки C ++ могут дополнительно экспортировать sinf
из <cmath>
, но вы не можете полагаться на это в переносимой программе.)
Наконец, функции fabs
, fabsf
и fabsl
изстандартная библиотека C стала перегружена на std::abs
в <cmath>
.
Хотя оба заголовка включены в стандарт, вы должны действительно предпочесть <cmath>
, так как <math.h>
существует только для обратной совместимости с preстандарт C ++ и C.
В стандарте C ++ нет такой вещи, как <cmath.h>
.