2015年2月28日土曜日

将来プログラマになりたいかというと微妙

微妙ですけど、とりあえず今は
趣味としてゲーム制作をやってます。

金になったらいいけどね。



なんやかんやでHSPで作ってるゲームで謎バグ発生。

ソースをじっくり読み込んで、
デバッグ表示を入れたりして、
ようやく発見した原因が、
「割り算の誤差」

パソコンの中では数値を二進数で取り扱うわけですが、
なんと、二進数では十進数で言う0.1が正確に表せないのです。

十進数の場合は10で割ると位が一つ下がるのと同様に
二進数の場合は2で割ると位が一つ下がるんです。

この辺が原因になって小数は正しく表せないことがあるんです。

実際に念のためにテストしてみたソースですが


repeat 100
  x=0.0+cnt
  x/=100
  x*=100
  if x!=cnt:dialog "誤差発生"
loop

これを実行すると0~99までの数字の中ででも
100で割って100倍するだけで違う数字になるものが
5つほどあることが分かりました。(研究とかじゃないのでメモとってません)

ただ、このスクリプトの3行目と4行目を入れ替えると、
数式の上では全く同じ計算にもかかわらず、誤差は全く生じません。

小数が絡むとどうしても誤差の原因になるのですが、
最初から最後まで整数であれば誤差は発生しません。

とりあえずはそのプログラム内で処理の順番を変えて何とか動くようになりました。


後は見た目を綺麗にしたりするだけかな~
私が一番苦手な…

0 件のコメント:

コメントを投稿