ページ 11

三角関数での角度の求め方

Posted: 2015年3月08日(日) 17:47
by kazu
こんにちは。
STGゲームを作っています。

正面方向(90度)に弾を打つ際に、

x = 移動量( 現在1.0f ) * cosf( 90.0f * (3.141592654f / 180.0f ) );
y = 移動量( 現在1.0f ) * sinf( 90.0f * (3.141592654f / 180.0f ) );

で計算したところ、

x = -4.3711388e-008; ← 0 になるはずでは??
y = 1.0;
となっていました。

私の考えでは、x=0になるはずなのですが、このような結果になってしまいました。
なぜこのような値になってしまったのでしょうか?

Re: 三角関数での角度の求め方

Posted: 2015年3月08日(日) 18:02
by みけCAT
詳しいことはわからないですが、浮動小数点数の演算誤差のせいでしょう。

Re: 三角関数での角度の求め方

Posted: 2015年3月08日(日) 18:11
by box
本来は無限小数であるはずの円周率の値を有限の桁数で切っていることも
少しは関係していそうな気がします。
まあ、「ほとんど0」とみなせる場合は「強制的に0にする」という手もあるかなと思います。
10^(-8)
なんて、ゲームの世界ではほとんど意識しなくていいでしょう。

Re: 三角関数での角度の求め方

Posted: 2015年3月08日(日) 20:53
by daive
>私の考えでは、x=0になるはずなのですが、このような結果になってしまいました。
>なぜこのような値になってしまったのでしょうか?
なぜ、X=0になると思ったのか?
多分、電卓(10進数演算)の結果だったりしませんか?
コンピュータでは、計算方法が多数あります、
古の可変語長計算機
現代的浮動小数点計算
IEEEにある、浮動小数点演算
固定小数点演算
10進数演算

簡単なところで、固定少数点演算、正のみ
4bytes、整数2bytes、小数部2bytes
整数値は、0~65535
小数値は、1/65536
で表されます。
で、この範囲に収まらない値は、どちらかに補正されます、
どの様に補正するかは、実装によります。

Re: 三角関数での角度の求め方

Posted: 2015年3月10日(火) 23:26
by kazu
回答ありがとうございます。

調べてみたところ、皆さんのご指摘にあった「誤差」が原因でした。
ありがとうございました。