Это зависит от того, какую версию стандарта поддерживает ваша реализация.
Функция sinf
не существовала в стандарте ISO C 1990 года (как и sind
). Единственная функция sin
была sin
, которая принимает аргумент double
и возвращает результат double
. (В разделе «Будущие направления библиотек», 7.13, говорится, что математические функции с именами с суффиксом f
или l
зарезервированы.)
Функции sinf
и sind
были добавлены в стандарт ISO C 1999 года (C99).
Издание 2003 года стандарта ISO C ++ в разделе 17.4.1.2 [lib.headers] гласит:
За исключением случаев, указанных в пунктах 18-27, содержимое каждого заголовка
cname должно быть таким же, как у соответствующего заголовка name.h , как
указано в ИСО / МЭК 9899: 1990 Языки программирования C (раздел 7), или
ISO / IEC: 1990 Языки программирования - C ПОПРАВКА 1: C Целостность, (пункт
7) в зависимости от обстоятельств, как будто путем включения.
Стандарт ISO C ++ 2011 (по крайней мере черновик N3290) включает в себя следующие нормативные ссылки:
- ISO / IEC 9899: 1999, Языки программирования - C
- ISO / IEC 9899: 1999 / Cor.1: 2001 (E), Языки программирования - C, Техническое исправление 1
- ISO / IEC 9899: 1999 / Cor.2: 2004 (E), Языки программирования - C, Техническое исправление 2
- ISO / IEC 9899: 1999 / Cor.3: 2007 (E), Языки программирования - C, Техническое исправление 3
Таким образом, реализация C ++, которая соответствует стандарту ранее, что C ++ 11 не должна обеспечивать sinf
. Неясно, разрешено ли для этого разрешено , но поскольку все стандарты до C ++ 11 официально устарели, это, вероятно, спорный вопрос.
Вероятно, для реализаций до C ++ 11 характерно предоставление sinf()
и друзей в качестве (возможно, не соответствующего) расширения.
Практически, вы всегда можете просто позвонить sin()
; в большинстве случаев аргумент и результат будут неявно преобразованы из float
в double
и из double
в float
. Может быть (или нет) потеря эффективности.