sin
提供:cppreference.com
< cpp | numeric/math
文法:
#include <cmath> double sin( double 引数 );
sin()関数は、引数の正弦(サイン)を計算して返します。引数はラジアンで渡します。返り値は[-1, 1]の範囲になります。もしも引数が無限の場合には、sin()関数はNANを返し、浮動小数点数例外を上げます。
C++では、以下のオーバーロード版も提供されます:
#include <cmath> float sin( float 引数 ); // C99のsinf()と同じです long double sin( long double 引数 ); // C99のsinl()と同じです
sin(x) = x - x3/3! + x5/5! - x7/7! + ...という近似を利用すると、 テイラー展開を使ったsin関数の近似を実装することができます。これを実際に実装してみたのが以下のコードです:
long factrl(int n) { long la = 1; for( int i = 2; i <= n; i++ ) la *= i; return la; } float sin2(float x) { int i; float y=x ,r=x; for( int i=0; i < 10; i++ ) { y *= -x*x; r += 1.0 / factrl( 1+2*(i+1) ) * y; } return r; } float sin(float theta) { float sign = 1, x = theta/M_PI; if (x < 0.0) { sign = -1; x = -x; } int i = static_cast<int>(x+0.5); float a = x-i; if( (i-i/2*2) != 0 ) sign = -sign; return sign * sin2(a*M_PI); }