Sinf - 它存在于 C++ 中吗?

zeb*_*und 1 c++ trigonometry math.h

sinf我很好奇通过包含 .c++来知道该函数是否存在于 C++ 中math.h

当在 Qt Creator 中查看我的自动完成功能时,它似乎没有弹出。这让我想知道是否出于某种原因它被删除了。谷歌搜索似乎也没有弹出很多参考文献;其中大部分是针对直 C 的。

那么,这一点能否得到证实呢?

Kei*_*son 5

这取决于您的实现支持哪个版本的标准。

\n\n

sinf函数在 1990 年 ISO C 标准中不存在(也不存在sind)。唯一的sin函数是sin,它接受一个double参数并返回一个double结果。(“未来的图书馆方向”部分,7.13,确实说名称后缀为f或 的数学函数l被保留。)

\n\n

1999 年 ISO C 标准 (C99) 中添加了sinf和函数。sind

\n\n

2003 年版的 ISO C++ 标准在第 17.4.1.2 节 [lib.headers] 中表示:

\n\n
\n

除第 18 至 27 条中另有规定外,每个标头 cname的内容应与相应标头name.h的内容相同,如 ISO/IEC 9899:1990 编程语言 C(第 7 条)中指定的那样,或\n ISO/IEC:1990 编程语言\xe2\x80\x94C 修正案 1:C 完整性,(第 7 条),视情况而定,如同通过包含一样。

\n
\n\n

2011 年 ISO C++ 标准(至少是 N3290 草案)包含以下规范性参考内容:

\n\n
    \n
  • ISO/IEC 9899:1999,编程语言 \xe2\x80\x94 C
  • \n
  • ISO/IEC 9899:1999/Cor.1:2001(E),编程语言 \xe2\x80\x94 C,技术勘误 1
  • \n
  • ISO/IEC 9899:1999/Cor.2:2004(E),编程语言 \xe2\x80\x94 C,技术勘误 2
  • \n
  • ISO/IEC 9899:1999/Cor.3:2007(E),编程语言 \xe2\x80\x94 C,技术勘误表 3
  • \n
\n\n

因此,符合 C++11 之前标准的 C++ 实现不需要提供sinf。目前尚不清楚是否允许这样做,但由于 C++11 之前的所有标准均已正式过时,因此这可能是一个没有实际意义的问题。

\n\n

sinf()对于 C++11 之前的实现来说,提供和朋友作为(可能不合格)扩展可能很常见。

\n\n

实际上,您随时可以拨打电话sin();在大多数情况下,参数和结果将隐式地从floattodoubledoubleto转换float。可能(也可能不会)存在一些效率损失。

\n