1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Verse】ゲーム制作における丸め関数の使い分け🎮

Posted at

前置き

Verse の丸め処理の関数(Floor / Ceil / Round / Int)の処理結果を比較し、また、それら関数の使い分けについて調べました。

丸め処理とは?

数値を指定された桁数や単位で近似する(調整する) ことです。
これから紹介する関数は 小数を整数に変換する処理 で、どの方向に丸めるかによって結果が変わります。
ゲーム制作では、目的に応じて適切な関数を選びます。


丸め関数の一覧と特徴

関数 丸め方向 境界値 0.5 の扱い 使う場面例
Floor[] 小さい方へ(切り捨て) 常に切り捨て 所持数・座標の下限処理
Ceil[] 大きい方へ(切り上げ) 常に切り上げ クラフト素材・ページ数
Round[] 最も近い整数へ 偶数丸め(IEEE-754) 表示値・統計処理
Int[] ゼロ方向へ(符号無視) 常にゼロ方向 座標変換・小数抽出

🔢 計算結果の比較

検証用コード・出力結果
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }


float_to_int_test_device := class(creative_device):

    OnBegin<override>()<suspends>:void=

        Print("=== 4つの丸め関数の比較 ===")
        # 正の数:小数部分による違いを確認
        CompareRounding(3.2)   # 小数部分 < 0.5 → Roundは切り捨て側
        CompareRounding(3.5)   # 小数部分 = 0.5 → Roundの境界値(.5の丸め方)
        CompareRounding(3.8)   # 小数部分 > 0.5 → Roundは切り上げ側
        
        # 負の数:FloorとIntの違いが顕著に現れる
        CompareRounding(-2.3)  # Floor=-3(小さい方), Int=-2(ゼロ方向)
        CompareRounding(-2.5)  # 負の数での.5の扱い
        CompareRounding(-2.7)  # 負の数でも小数部分の影響を確認
        
        # ゼロ近傍:ゼロをまたぐときの挙動
        CompareRounding(0.9)   # 正でゼロに近い → Intは0を保つ
        CompareRounding(-0.9)  # 負でゼロに近い → 正負での挙動の違いを確認
        

    # 4つの丸め関数を比較する関数
    CompareRounding(Value:float):void=
        if:
            ResultFloor := Floor[Value]
            ResultCeil := Ceil[Value]
            ResultRound := Round[Value]
            ResultInt := Int[Value]
        then:
            Print("値: {Value}")
            Print("  Floor : {ResultFloor}  (負の無限大方向へ)")
            Print("  Ceil  : {ResultCeil}  (正の無限大方向へ)")
            Print("  Round : {ResultRound}  (最近傍へ、.5は偶数方向へ)")
            Print("  Int   : {ResultInt}  (ゼロ方向へ)")
            Print("")
=== 4つの丸め関数の比較 ===
値: 3.200000
  Floor : 3  (負の無限大方向へ)
  Ceil  : 4  (正の無限大方向へ)
  Round : 3  (最近傍へ、.5は偶数方向へ)
  Int   : 3  (ゼロ方向へ)

値: 3.500000
  Floor : 3  (負の無限大方向へ)
  Ceil  : 4  (正の無限大方向へ)
  Round : 4  (最近傍へ、.5は偶数方向へ)
  Int   : 3  (ゼロ方向へ)

値: 3.800000
  Floor : 3  (負の無限大方向へ)
  Ceil  : 4  (正の無限大方向へ)
  Round : 4  (最近傍へ、.5は偶数方向へ)
  Int   : 3  (ゼロ方向へ)

値: -2.300000
  Floor : -3  (負の無限大方向へ)
  Ceil  : -2  (正の無限大方向へ)
  Round : -2  (最近傍へ、.5は偶数方向へ)
  Int   : -2  (ゼロ方向へ)

値: -2.500000
  Floor : -3  (負の無限大方向へ)
  Ceil  : -2  (正の無限大方向へ)
  Round : -2  (最近傍へ、.5は偶数方向へ)
  Int   : -2  (ゼロ方向へ)

値: -2.700000
  Floor : -3  (負の無限大方向へ)
  Ceil  : -2  (正の無限大方向へ)
  Round : -3  (最近傍へ、.5は偶数方向へ)
  Int   : -2  (ゼロ方向へ)

値: 0.900000
  Floor : 0  (負の無限大方向へ)
  Ceil  : 1  (正の無限大方向へ)
  Round : 1  (最近傍へ、.5は偶数方向へ)
  Int   : 0  (ゼロ方向へ)

値: -0.900000
  Floor : -1  (負の無限大方向へ)
  Ceil  : 0  (正の無限大方向へ)
  Round : -1  (最近傍へ、.5は偶数方向へ)
  Int   : 0  (ゼロ方向へ)

A. 正の数での比較

Value Floor Ceil Round Int
3.2 3 4 3 3
3.5 3 4 4 3
3.8 3 4 4 3

B. 負の数での比較

Value Floor Ceil Round Int
-2.3 -3 -2 -2 -2
-2.5 -3 -2 -2 -2
-2.7 -3 -2 -3 -2

負の数では FloorInt の違いが最も明確になります。

  • Floor: -2.3を 小さい方(負の無限大) の -3 へ
  • Int: -2.3を ゼロ方向 の -2 へ

C. ゼロ近傍での比較

Value Floor Ceil Round Int
0.9 0 1 1 0
-0.9 -1 0 -1 0

D. (補足)Round[] の偶数丸めの例

Round[] は 「四捨五入」 とよく言われますが、.5 の境界値では 偶数丸め のルールが適用されます。

Value Roundの結果 適用ルール
3.5 4 最も近い偶数(3と4で4)
2.5 2 最も近い偶数(2と3で2)

🎮 ゲーム制作での丸め処理の使い分け

🥇 Floor[](切り捨て)

👉 「余りは捨てて、確実に持っている分だけ」扱いたいとき

  • リソース管理: 3.8 個のアイテム → 実際に使えるのは 3 個
  • 座標計算: float 座標をグリッドの 左上(小さい方) に変換
  • 経験値: 端数は切り捨てて、次のレベルに持ち越さない

🥈 Ceil[](切り上げ)

👉 「不足を許さず、必ず足りるように」扱いたいとき

  • クラフト: 3.2 個必要 → 実際には 4 個要求
  • ダメージ: 0.1 ダメージでも最低 1 ダメージにする
  • ページ数: 要素 N を M 個ずつ表示 → ページ数は Ceil[N/M]

🥉 Round[](四捨五入)

👉 「一番近い整数にして、公平に」扱いたいとき

  • 表示ダメージ: 150.6 → 151 と表示(プレイヤーに自然に見える)
  • 統計値: 平均値や結果を丸めて表示

🏅 Int[](ゼロ方向の切り捨て)

👉 「符号に関係なく小数点以下を無視」したいとき

  • 座標変換: float → int に変換し、中心 0 からの相対位置を取得
  • 小数部分の抽出: X - Int(X) で小数点以下だけを取り出す

✅ まとめイメージ

  • Floor → 「持っている分だけ」(確実に切り捨てたいとき)
  • Ceil → 「足りない分も確保」(確実に切り上げたいとき)
  • Round → 「一番近い整数」(公平な四捨五入に近い処理をしたいとき)
  • Int → 「小数点以下を無視」(符号を気にせず整数部分だけほしいとき)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?