人気ブログランキング | 話題のタグを見る

最速の中のBlog

saisoku.exblog.jp
ブログトップ
2012年 04月 16日

【MUGEN】四捨五入しよう!【制作技術】

今日は四捨五入のお話。

MUGEN上で何かを計算する際に、小数点以下の値が混ざってしまうこと、よくありますよね。
混ざってはいけない計算で混ざってしまい、エラーメッセージがダダ漏れ、などというのもよくある事。
何かを計算する時は値を丸めるのがMUGEN上での礼儀の一つと言えるでしょう。

小数点以下の数を丸める場合、MUGENには次の2つの手段があります。

ceil(値)・・・小数点以下を切り上げる。 例:ceil(10+0.4)=11、ceil(10+0.6)=11
floor(値)・・・小数点以下を切り捨てる。 例:floor(10+.4)=10、floor(10+.6)=10

非常に残念なことに、四捨五入することは出来ません
ええー!プログラムなのに!?と思われるかもしれませんが、
ごくごく一般的な言語のひとつ、c言語などでも出来るようになったのは最近です。普通のことなんですね。

実はこれ、ちょっと手を加えるだけで簡単に求められてしまうため、
「そんなもんてめーで勝手にやってろよ^^;」という扱いなのです。かどうかは知りませんが。
ではどうやって求めるか?というのが今回のお話です。
あ、ちなみに簡単すぎるので内容はぺらっぺらです。


繰り返しになりますが、小数点以下を丸める命令はceilとfloorしかありません。
無いものは仕方が無いので、どうにかこうにか、この2つを利用して四捨五入しなければいけません。

さて四捨五入は、.1~.4、.5~.9で処理が仕切られています。
ceilを使って丸める際、問題になるのはこの.1~.4を切り上げてしまうことです。
同様にfloorを使う際の問題点は.5~.9を切り捨ててしまうことにありますね。
この問題は下記の手段で解決します。


ceil
該当する値から0.4を引きます。ceilは小数点以下1以上のすべての値を切り上げるため、
小数点以下.0~.3の範囲が前の値に繰り下がった場合は元の値に切り上げ
小数点以下.5~.9の範囲は.1~.5に下がった後切り上げになります。
小数点以下.4の場合は.0に下がり値を維持します。


ceil( 10.0 - 0.4 ) = ceil( 9.6 ) = 10
ceil( 10.4 - 0.4 ) = ceil( 10.0 ) = 10
ceil( 10.5 - 0.4 ) = ceil( 10.1 ) = 11
ceil( 10.9 - 0.4 ) = ceil( 10.5 ) = 11



floor
該当する値に0.5を足します。floorは小数点以下1以上のすべての値を切り捨てるため、
小数点以下.0~.4の範囲は.5~.9の値に上がった後元の値に切り捨て
小数点以下.6~.9の範囲は.次の値に繰り上がった後切り捨てになります。
小数点以下.5の場合は次の値に繰り上がり.0となります。


floor( 10.0 + 0.5 ) = floor( 10.5 ) = 10
floor( 10.4 + 0.5 ) = floor( 10.9 ) = 10
floor( 10.5 + 0.5 ) = floor( 11.0 ) = 11
floor( 10.9 + 0.5 ) = floor( 11.4 ) = 11




ね?簡単だったでしょう?


まとめ
MUGENで小数点以下第一位を四捨五入する計算式は

ceil ( 四捨五入したい値 - 0.4 )
もしくは
floor ( 四捨五入したい値 + 0.5 )



おまけ:この方法では小数点以下第一位しか四捨五入できませんが、
小数点以下第二位以降を四捨五入して精度を高くしたい場合は
一度値を10倍(第三位なら100倍)して同様の処理を行い、また10(100)で割れば求められます。

by goukasoshina | 2012-04-16 09:30 | 最速のmugen


<< サカー覚醒ダメージ      【MUGEN】キャラクター使用... >>