Математический интерфейс vs 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).

есть и другие различия между ними: while <math.h> содержит все математические функции C с различными именами для различных типов, таких как

double sin(double);
float sinf(float);
long double sinl(long double);

etc., <cmath> содержится перегружен такие функции, как

namespace std {
    double sin(double);
    float sin(float);
    long double sin(long double);
}

etc. (Библиотеки C++ могут дополнительно экспортировать sinf С <cmath>, но вы не можете полагаться на это в портативной программы.)

наконец,fabs, fabsf и fabsl функции из стандартной библиотеки C стали перегрузками std::abs на <cmath>.

хотя оба заголовка находятся в стандарте, вы действительно должны предпочесть <cmath>, as <math.h> только для обратной совместимости с pre-standard C++ и С.

нет такой вещи, как <cmath.h> в стандартном C++.