- ベストアンサー
math.hについての疑問
- math.hを使うとsin, cos, tanなどの関数が利用できますが、内部ではsinf, cosf, tanfなどが呼び出されているようです。
- sin関数の計算方法について詳細を知りたいが、math.hにはその情報は書かれていないようです。おそらくライブラリ化されているのかもしれません。
- math.hを使っている場合、sin関数などの計算はmath.dllなどのライブラリが呼び出されている可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
C++の多重定義は理解できてますか? C++では引数の型によって別の関数として定義することができます。 > inline float __CRTDECL sin(_In_ float _X) とあるfloatを引数とするsinと > {return ((float)sin((double)_X)); } でdoubleを引数にしたsinとは別の関数になります。 引数の型まで含めて同じか別かを考えて追い掛ければ、最終的なものに辿りつけるはずです。 > ■質問2 > math.hをずっと眺めていてもみつかりませんでした。 通常、ヘッダファイルには、プロトタイプ宣言だけを書きます。例外はインライン関数とかテンプレートとかのコンパイル単位で定義が必要なものです。 > math.dllのようにライブラリ化しちゃってるのを呼び出してるだけなのでしょうか? DLLのような動的なものか、.libのような静的なものかはちょっと調べないとわかりませんが、予めコンパイル済みのものを使っているのが普通です。 ソースが公開されているものならそれを見れますが、そうでないなら、技術資料に頼るか、逆アセンブリで解析するか、あきらめるか、になります。 それに、最近のCPUだと、浮動小数点数の計算には専用の回路(FPU)を使っていて、三角関数なら「計算プログラム」はFPUに組込み済み、CPUからは1命令で呼びだしているだけ、ってこともあります。
その他の回答 (1)
- Yanch
- ベストアンサー率50% (114/225)
環境がわからないので、いいかげんな事を書いてみます。 ・float版の sin関数、inline float __CRTDECL sin(_In_ float _X) は、float 版の sinf関数にインライン展開されている。 ・float版の sinf関数、inline float sinf(_In_ float _X) は、double版の sin関数にインライン展開されている。 って、事でしょう。 そして、double版のsin関数は、上の2つとは別に用意してある。
補足
環境はVisualStudio 2010 Pro(DreamSpark)で、 VC++のWin32コンソールアプリケーションです。
お礼
Cを勉強していたので、C++の多重定義は知りませんでした! 調べた結果理解することができました! 質問2については とても難しいそうですが理解できるように頑張ります!