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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazu

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

#1

投稿記事 by kazu » 10年前

こんにちは。
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になるはずなのですが、このような結果になってしまいました。
なぜこのような値になってしまったのでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 10年前

詳しいことはわからないですが、浮動小数点数の演算誤差のせいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 14年前

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

#3

投稿記事 by box » 10年前

本来は無限小数であるはずの円周率の値を有限の桁数で切っていることも
少しは関係していそうな気がします。
まあ、「ほとんど0」とみなせる場合は「強制的に0にする」という手もあるかなと思います。
10^(-8)
なんて、ゲームの世界ではほとんど意識しなくていいでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

daive
記事: 11
登録日時: 10年前

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

#4

投稿記事 by daive » 10年前

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

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

kazu

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

#5

投稿記事 by kazu » 10年前

回答ありがとうございます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る