Математический интерфейс против cMath в C++
Интерфейс в моей системе сборки MacOS 10.6.3 для математической библиотеки POSIX - math.h, однако в моей целевой системе имя файла интерфейса - cmath.h. В школе мы используем cmath, и я хотел бы убедиться, что мой проект компилируется, когда он передается, как это достигается. Серверы и рабочие станции в школе - x86 под управлением Windows XP. GCC доступен на обеих платформах.
1 ответ
В стандарте 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>
только для обратной совместимости с предварительно стандартными C++ и C.
Там нет такого понятия, как <cmath.h>
в стандарте C++.