2012年 04月 16日
今日は四捨五入のお話。 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
|
アバウト
カレンダー
カテゴリ
以前の記事
最新のトラックバック
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||