読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

UE4のIntegerの上限と下限

f:id:una_unagi:20170228222348g:plain

「ちょっと気になることがあったんで、王様のスコアを1億点ずつにしてみた」

妹「マイナス……になってる?」

「スコアはInteger型で管理してるけど、これが上限を超えるとマイナスになってる。これはコンピューターの仕組み的な物で、32ビットの場合2147483647 ~ -2147483648が限界で、それ以上やそれ以下の数字にはならない」

妹「桁が多すぎてわからん」

「約21億。もし得点がこれを超える可能性があるなら、マイナスにならないように、条件分岐か何かで歯止めをかける必要がある。きりの良いとこで、9億9999万9999とか、1億とか、適当に」

妹「今のコンピューターで32ビットなの? だいぶ前に出たNINTENDO64って、あれは64ビットだったような……」

NINTENDO64はまた特殊な仕様なんだけど、まあ実際問題として今は64bitのが多い。ただ全部じゃない。C++を使えばint64型も作れるけど、32ビットの機種だと動かないはず」

妹「C++を使わずに増やそうと思うと、後ろにダミーの数字を付けて水増しするしかないのかな」

「他にもいくつか方法はあるよ。例えばFloat型を使う。340282346638528859811704183484516925440.0 ~ -340282346638528859811704183484516925440.0 だから、範囲は広い」

妹「それでいいじゃん。全部Floatで」

「でも桁数が増えるごとにどんどん数字があやしくなる。100足しても100増えないみたいなことがしょっちゅう。真面目に出来る範囲はIntegerより狭い。それでも良い用途ならいいんだけど」

「複数のIntegerに分けて管理するという方法もある。99999999 と 99999999 と8桁の変数を2つ並べて表示すれば、見た目は16桁の数字になる。繰り上がりと繰り下がりを手動でやるのがちょっと面倒くさいけど」