我在 Yashwant Kanetkar 的书 Let us C 中读到了有关 C 编程语言的内容。在函数章节中,我读到了 math.h 文件中的 sin、cos、tan 和 pow 函数。但本章中写道:
您甚至可以打开这个 math.h 文件并查看原型。它们将如下所示: 双重罪恶(双重); 双cos(双); 双棕褐色(双); 双战俘(双,双);
我使用的是 Debian Linux,math.h 文件位于 /usr/include 文件夹中。我在这个文件夹中打开了这个 math.h 文件并读取了整个文件,但我没有得到这个声明。
你能帮我在哪里可以找到 math.h 文件的 sin 函数的声明吗?如果此声明不是直接写入此文件,而是链接到另一个数学库文件,请告诉我该文件。我想看看C编程语言的math.h头文件中sin函数的确切声明。
当我打开 Debian Linux 的 /usr/include 文件夹中的 math.h 文件时,我没有看到任何看起来像 sin 函数或任何其他函数(如 cos、tan、sqrt 等)声明的行。我只能看到M_PI、M_LOG2E 等常量的值
我的系统中math.h文件的前几行如下:
#ifndef _MATH_H
#define _MATH_H 1
#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
#include <bits/libc-header-start.h>
#if defined log && defined __GNUC__
# warning A macro called log was already defined when <math.h> was included.
# warning This will cause compilation problems.
#endif
__BEGIN_DECLS
/* Get definitions of __intmax_t and __uintmax_t. */
#include <bits/types.h>
/* Get machine-dependent vector math functions declarations. */
#include <bits/math-vector.h>
/* Gather machine dependent type support. */
#include <bits/floatn.h>
/* Value returned on overflow. With IEEE 754 floating point, this is
+Infinity, otherwise the largest representable positive value. */
#if __GNUC_PREREQ (3, 3)
# define HUGE_VAL (__builtin_huge_val ())
#else
/* This may provoke compiler warnings, and may not be rounded to
+Infinity in all IEEE 754 rounding modes, but is the best that can
be done in ISO C while remaining a constant expression. 10,000 is
greater than the maximum (decimal) exponent for all supported
floating-point formats and widths. */
# define HUGE_VAL 1e10000
#endif
#ifdef __USE_ISOC99
# if __GNUC_PREREQ (3, 3)
# define HUGE_VALF (__builtin_huge_valf ())
# define HUGE_VALL (__builtin_huge_vall ())
# else
# define HUGE_VALF 1e10000f
# define HUGE_VALL 1e10000L
# endif
#endif
#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F16 (__builtin_huge_valf16 ())
#endif
#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F32 (__builtin_huge_valf32 ())
#endif
#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F64 (__builtin_huge_valf64 ())
#endif
#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F128 (__builtin_huge_valf128 ())
#endif
#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F32X (__builtin_huge_valf32x ())
#endif
#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F64X (__builtin_huge_valf64x ())
#endif
#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT)
# define HUGE_VAL_F128X (__builtin_huge_valf128x ())
#endif
#ifdef __USE_ISOC99
/* IEEE positive infinity. */
# if __GNUC_PREREQ (3, 3)
# define INFINITY (__builtin_inff ())
# else
# define INFINITY HUGE_VALF
# endif
/* IEEE Not A Number. */
# if __GNUC_PREREQ (3, 3)
# define NAN (__builtin_nanf (""))
# else
/* This will raise an "invalid" exception outside static initializers,
but is the best that can be done in ISO C while remaining a
constant expression. */
# define NAN (0.0f / 0.0f)
# endif
#endif /* __USE_ISOC99 */
sin(x)
是一个内在函数。这意味着编译器知道该函数,并且无需在 math.h 中声明即可使用它。