- ベストアンサー
C言語にてsin,cosは何?
C言語でsin、cosを計算したところ、答えが違っていました。 netで探したところ<math.h>をincludeしていないせいだとわかったのですが、 <math.h>を指定しなかったら何を計算しているんでしょうか? Visual Studio 2013 win7 #include<stdio.h> #include <math.h> int main(void){ printf("結果=%f\n",sin(0.5)); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
プロトタイプ宣言のない関数を呼び出すと, 「int を返す」と仮定される. さらに, 「int と double で異なるレジスタを使う」という実装では ・sin が返す値は double 用のレジスタに入っている ・printf の引数に渡す値は int 用のレジスタから取り出す ことになり, 「sin が計算した値」とは全く関係のない値が printf に渡される可能性がある.
その他の回答 (4)
- kmee
- ベストアンサー率55% (1857/3366)
/w 警告をすべて無効にする /wd<n> 警告 n を無効にする /we<n> 警告 n をエラーとして扱う /wo<n> 警告 n を 1 度だけ表示する /w<l><n> n の警告レベル 1-4 を設定する /W<n> 警告レベルを設定する (既定 n=1) /Wall 警告をすべて有効にする /WL 1 行診断を有効にする /WX 警告をエラーとして扱う このあたりが、警告関係。 詳細はマニュアルを参考に。 http://msdn.microsoft.com/ja-jp/library/thxezb7y%28v=vs.90%29.aspx Visual Studio のプロジェクトで設定するなら「コンパイル」に「警告レベル」という項目があって、それが上記の/W<n>に相当します。 警告毎に個別に制御できますが、最初のうちは、まとめて制御する /W4 や /Wall 等で、高めに設定するとよいでしょう。
お礼
ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, あとついで: たぶん「未宣言の関数に対して警告を出す」オプションはあると思うから, それを *常に* 設定しておくといい.
補足
見つかりません>< コンパイルオプションですがここに入らなかったために http://www.eonet.ne.jp/~fhm07425/aaa.txt にアップしました。
- Tacosan
- ベストアンサー率23% (3656/15482)
理屈からいえば「int 以外の値を返す関数を宣言している」すべてのヘッダ. 常識的には「全部」.
補足
「全部」をリストにあげてもらえませんか?
- _kappe_
- ベストアンサー率68% (1581/2304)
math.hをインクルードしなかった場合も、sinやcosの計算をしています。ただ、その結果の解釈方法が変わってしまうのです。 math.hにはsin()やcos()は「double型を返す」と宣言されています。C言語では、型の宣言がされていない関数は暗黙的にint型を返すものと見なすことになっているので、math.hをインクルードしないと結果の型を誤解してしまいます。
お礼
ありがとうございました。
補足
そういった、宣言しないと意図しない結果になるヘッダーは他に何がありますか? 全て上げていただけるとありがたいです。こんなことで悩むのは嫌ですから。 (エラーになるものは調べるきっかけがあるので省略してください。)
お礼
ありがとうございました。
補足
そういった、宣言しないと意図しない結果になるヘッダーは他に何がありますか? 全て上げていただけるとありがたいです。こんなことで悩むのは嫌ですから。 (エラーになるものは調べるきっかけがあるので省略してください。)