Sin на языке программирования

std:: sin, std:: sinf, std:: sinl

If no errors occur, the sine of num ( sin(num) ) in the range [-1, +1] , is returned.

The result may have little or no significance if the magnitude of num is large.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

[edit] Error handling

Errors are reported as specified in math_errhandling .

If the implementation supports IEEE floating-point arithmetic (IEC 60559),

  • if the argument is ±0, it is returned unmodified
  • if the argument is ±∞, NaN is returned and FE_INVALID is raised
  • if the argument is NaN, NaN is returned

[edit] Notes

The case where the argument is infinite is not specified to be a domain error in C (to which C++ defers), but it is defined as a domain error in POSIX

POSIX also specifies that in case of underflow, num is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN , FLT_MIN , and LDBL_MIN is returned.

The additional overloads are not required to be provided exactly as (A) . They only need to be sufficient to ensure that for their argument num of integer type, std :: sin ( num ) has the same effect as std :: sin ( static_cast < double >( num ) ) .

[edit] Example

#include #include #include #include #include // #pragma STDC FENV_ACCESS ON const double pi = std::acos(-1); // or std::numbers::pi since C++20 constexpr double your_sin(double x) { double sin {0}, pow {x}; for (auto fac {1LLU}, n {1ULL}; n != 20; fac *= ++n, pow *= x) if (n & 1) sin += (n & 2 ? -pow : pow) / fac; return sin; } int main() { std::cout  std::setprecision(10)  std::showpos  "Typical usage:\n"  "std::sin(pi/6) = "  std::sin(pi / 6)  '\n'  "your sin(pi/6) = "  your_sin(pi / 6)  '\n'  "std::sin(pi/2) = "  std::sin(pi / 2)  '\n'  "your sin(pi/2) = "  your_sin(pi / 2)  '\n'  "std::sin(-3*pi/4) = "  std::sin(-3 * pi / 4)  '\n'  "your sin(-3*pi/4) = "  your_sin(-3 * pi / 4)  '\n'  "Special values:\n"  "std::sin(+0) = "  std::sin(0.0)  '\n'  "std::sin(-0) = "  std::sin(-0.0)  '\n'; // error handling std::feclearexcept(FE_ALL_EXCEPT); std::cout  "std::sin(INFINITY) = "  std::sin(INFINITY)  '\n'; if (std::fetestexcept(FE_INVALID)) std::cout  " FE_INVALID raised\n"; }
Typical usage: std::sin(pi/6) = +0.5 your sin(pi/6) = +0.5 std::sin(pi/2) = +1 your sin(pi/2) = +1 std::sin(-3*pi/4) = -0.7071067812 your sin(-3*pi/4) = -0.7071067812 Special values: std::sin(+0) = +0 std::sin(-0) = -0 std::sin(INFINITY) = -nan FE_INVALID raised

Источник

sin , sinf , sinl

The sin functions return the sine of x . If x is greater than or equal to 263, or less than or equal to -263, a loss of significance in the result occurs.

Input SEH exception _matherr exception
± QNaN, IND None _DOMAIN
± INF ( sin , sinf , sinl ) INVALID _DOMAIN

Remarks

Because C++ allows overloading, you can call overloads of sin that take and return float or long double values. In a C program, unless you’re using the macro to call this function, sin always takes and returns double .

If you use the sin() macro, the type of the argument determines which version of the function is selected. See Type-generic math for details.

By default, this function’s global state is scoped to the application. To change this behavior, see Global state in the CRT.

Requirements

Routine Required header (C) Required header (C++)
sin , sinf , sinl or
sin macro

For more compatibility information, see Compatibility.

Example

// crt_sincos.c // This program displays the sine and cosine of pi / 2. // Compile by using: cl /W4 crt_sincos.c #include #include int main( void) < double pi = 3.1415926535; double x, y; x = pi / 2; y = sin( x ); printf( "sin( %f ) = %f\n", x, y ); y = cos( x ); printf( "cos( %f ) = %f\n", x, y ); >
sin( 1.570796 ) = 1.000000 cos( 1.570796 ) = 0.000000 

Источник

Стандартные математические функции в языке Си

Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.

Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:

Некоторые математические функции

fabs(x) модуль числа x
sqrt(x) квадратный корень из числа x
sin(x) синус числа x (х в радианах)
cos(x) косинус числа x (х в радианах)
pow(x, y) вычисление x y
exp(x) вычисление e x
log(x) натуральный логарифм числа x
log10(x) десятичный логарифм числа x

  • Все функции возвращают значение типа double .
  • Параметры функций – вещественные числа( double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.

#include #include // подключаем math.h int main (void)

#include #include // подключаем math.h int main (void) < double alpha, sin_a, pi = 3.1415926; scanf("%lf",&alpha); alpha = alpha*pi/180; sin_a = sin(alpha); printf("%.2f\n", sin_a); return 0; >

В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы. Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.

Неявное преобразование типов

При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип. Неявное преобразование типов осуществляется в следующих случаях:

  1. перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
  2. выполнение арифметических операций с разными типами аргументов
  3. перед выполнением присваивания
  • если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
    Порядок типов: int < float < double
  • при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.

Примеры: int+float будет автоматически преобразовано к float+float
float/int будет автоматически преобразовано к float/float
double*float будет преобразовано к double*double
int = double double будет преобразовано к int с потерей дробной части
float = int int будет преобразовано к float

Практика

Решите предложенные задачи: Для удобства работы сразу переходите в полноэкранный режим

Дополнительные материалы

Источник

sin , sinf , sinl

Функции sin возвращают синус x . Если x значение больше или равно 263, меньше или равно -263, происходит потеря значимости в результате.

Входные данные Исключение SEH Исключение _matherr
± QNaN, IND Нет _DOMAIN
± INF ( sin , sinf , sinl ) INVALID _DOMAIN

Дополнительные сведения о кодах возврата см. в разделе errno , _doserrno , _sys_errlist и _sys_nerr .

Комментарии

Поскольку C++ допускает перегрузку, можно вызывать перегрузки sin , которые принимают и возвращают значения float или long double . В программе на языке C, если вы не используете макрос для вызова этой функции, sin всегда принимает и возвращает . double

При использовании макроса sin() тип аргумента определяет, какая версия функции выбрана. Дополнительные сведения см. в разделе Типообразная математика .

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см. статью Глобальное состояние в CRT.

Требования

Подпрограмма Обязательный заголовок (C) Обязательный заголовок (C++)
sin , sinf , sinl или
sin Макрос

Дополнительные сведения о совместимости см. в разделе Compatibility.

Пример

// crt_sincos.c // This program displays the sine and cosine of pi / 2. // Compile by using: cl /W4 crt_sincos.c #include #include int main( void) < double pi = 3.1415926535; double x, y; x = pi / 2; y = sin( x ); printf( "sin( %f ) = %f\n", x, y ); y = cos( x ); printf( "cos( %f ) = %f\n", x, y ); >
sin( 1.570796 ) = 1.000000 cos( 1.570796 ) = 0.000000 

Источник

sin, sinf, sinl

7) Type-generic macro: If the argument has type long double , (3) ( sinl ) is called. Otherwise, if the argument has integer type or the type double , (2) ( sin ) is called. Otherwise, (1) ( sinf ) is called. If the argument is complex, then the macro invokes the corresponding complex function ( csinl , csin , csinf ).

The functions (4-6) are declared if and only if the implementation predefines __STDC_IEC_60559_DFP__ (i.e. the implementation supports decimal floating-point numbers).

Contents

[edit] Parameters

[edit] Return value

If no errors occur, the sine of arg ( sin(arg) ) in the range [-1 ; +1] , is returned.

The result may have little or no significance if the magnitude of arg is large.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

[edit] Error handling

Errors are reported as specified in math_errhandling .

If the implementation supports IEEE floating-point arithmetic (IEC 60559):

  • if the argument is ±0, it is returned unmodified;
  • if the argument is ±∞, NaN is returned and FE_INVALID is raised;
  • if the argument is NaN, NaN is returned.

[edit] Notes

The case where the argument is infinite is not specified to be a domain error in C, but it is defined as a domain error in POSIX.

POSIX also specifies that in case of underflow, arg is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN , FLT_MIN , and LDBL_MIN is returned.

[edit] Example

#include #include #include #include #ifndef __GNUC__ #pragma STDC FENV_ACCESS ON #endif int main(void) { const double pi = acos(-1); // typical usage printf("sin(pi/6) = %f\n", sin(pi / 6)); printf("sin(pi/2) = %f\n", sin(pi / 2)); printf("sin(-3*pi/4) = %f\n", sin(-3 * pi / 4)); // special values printf("sin(+0) = %f\n", sin(0.0)); printf("sin(-0) = %f\n", sin(-0.0)); // error handling feclearexcept(FE_ALL_EXCEPT); printf("sin(INFINITY) = %f\n", sin(INFINITY)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); }
sin(pi/6) = 0.500000 sin(pi/2) = 1.000000 sin(-3*pi/4) = -0.707107 sin(+0) = 0.000000 sin(-0) = -0.000000 sin(INFINITY) = -nan FE_INVALID raised

[edit] References

  • C23 standard (ISO/IEC 9899:2023):
  • 7.12.4.6 The sin functions (p: TBD)
  • 7.27 Type-generic math (p: TBD)
  • F.10.1.6 The sin functions (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 7.12.4.6 The sin functions (p: 175)
  • 7.25 Type-generic math (p: 272-273)
  • F.10.1.6 The sin functions (p: 378)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.4.6 The sin functions (p: 239-240)
  • 7.25 Type-generic math (p: 373-375)
  • F.10.1.6 The sin functions (p: 519)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.4.6 The sin functions (p: 220)
  • 7.22 Type-generic math (p: 335-337)
  • F.9.1.6 The sin functions (p: 456)

Источник

Читайте также:  Ipad программы для верстки
Оцените статью