HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0809
マクラウド0で止まらない2解決


マクラウド

リンク

2012/8/9(Thu) 19:36:32|NO.48358


a=0.0 repeat getkey hi,37 ;方向キー左 getkey mi,39 ;方向キー右 if mi=1:a+=0.3 if hi=1:a-=0.3 if a>3:a=3.0 if a<-3:a=-3.0 if (mi=0)&(hi=0){ if a>0:a-=0.3 if a<0:a+=0.3 } cls mes a wait 10 loop

上のような方向キーをおすと数字が変化し、何も押さないと
数字が0に近づいていくスクリプトをつくったのですが、
数字を-3.0にしてからキーを押さずにいると
数字が0で止まらずに0.3で止まってしまいます。
何故でしょうか。



この記事に返信する


暇人

リンク

2012/8/9(Thu) 20:50:27|NO.48368

実数は誤差がある
mesは小数点以下7桁ぐらいで
繰り上げて表示するから分かり難い

a=0.123456789 mes a mes strf("%.20f",a)//小数点以下20桁まで表示 b=0.3 mes b mes strf("%.20f",b)
0.3が内部的には0.3じゃない事が見える

対策は色々あると思うけど

a=0.0 repeat getkey hi,37 ;方向キー左 getkey mi,39 ;方向キー右 if mi=1:a+=0.3 if hi=1:a-=0.3 if a>3:a=3.0 if a<-3:a=-3.0 if (mi=0)&(hi=0){ if absf(a)>0.3 { if a>0:a-=0.3 if a<0:a+=0.3 }else{//-0.3〜0.3の間なら0.0に a=0.0 } } cls mes strf("%.20f",a) wait 10 loop



マクラウド

リンク

2012/8/9(Thu) 21:03:40|NO.48370

実数に誤差があるのは知りませんでした!

解決しました、ありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.