フラクション演算

今回は新しく追加してみたフラクション演算についてです。


サンプルとして、BMSを使った音ゲーを書いてたのですが、
時間単位から描画単位に変換する式で乗算除算がでてきます。
例えば小節単位で変換すると


描画位置 = 描画範囲 * (時間位置 / 時間範囲)

整数での演算だと(時間位置 / 時間範囲)の段階で必ず0に切り捨てられてしまうので


描画位置 = (描画範囲 * 時間位置) / 時間範囲

のように演算の順番が変わります。
このくらいなら可読性にさほど変化はないのですが、単位変換式の中にまた単位変換する必要がある場合や複雑な計算になってくると、演算順位を少し考える必要が出てきます。
しかし、可読性を考えると、式はそのまま書くのが一番です。


解決策として、double型を実装してもできるのですが、できるだけ型は簡潔(整数型と文字列型)にしたかったので、今回のフラクション演算を追加してみました。
これは演算中は特別な値として扱い、代入や他の演算子が出現すると整数値に変換します。
なので先ほどの式も優先順位を考える必要がなく、正しい値に変換(小数部分はもちろん切り捨てられてしまうのですが)できます。


描画位置 = 描画範囲 .* (時間位置 ./ 時間範囲)


スケーリングして計算する際などに役立つかなと思ったのですが、どうなんでしょうね(・ω・)