書名: 騰訊游戲開發(fā)精粹作者名: 騰訊游戲編著本章字?jǐn)?shù): 548字更新時(shí)間: 2019-08-30 16:20:44
2.2 基于整數(shù)的二進(jìn)制表示的定點(diǎn)數(shù)原理
把整數(shù)的二進(jìn)制表示中較低的n位視為小數(shù)部分,那么一個(gè)整數(shù)的二進(jìn)制形式表示的定點(diǎn)數(shù)值其實(shí)就是這個(gè)整數(shù)值除以2n。設(shè)a為定點(diǎn)數(shù),f(a)為這個(gè)定點(diǎn)數(shù)對(duì)應(yīng)的整數(shù)值,即f(a)是一個(gè)整數(shù),a是它所表示的定點(diǎn)數(shù),那么有

定點(diǎn)數(shù)對(duì)應(yīng)的整數(shù)值可以實(shí)現(xiàn)為定點(diǎn)數(shù)類的成員變量。
2.2.1 32位定點(diǎn)數(shù)表示原理
如下為32位定點(diǎn)數(shù)的實(shí)現(xiàn)方法。
class FScalar { std::int32_t rawValue; static const std::int32_t fractionBits = 10; // 小數(shù)位數(shù) static const std::int32_t wholeBits = 22; // 整數(shù)位數(shù) }
如表2.2所示為32位定點(diǎn)數(shù)的結(jié)構(gòu)。
表2.2 32位定點(diǎn)數(shù)的結(jié)構(gòu)

內(nèi)部的原始表示方式為32位整數(shù),采用22.10定點(diǎn)數(shù)格式,即22位有符號(hào)整數(shù),10位小數(shù)。可表示精度為

數(shù)學(xué)上的范圍為

實(shí)際值為
-2097152.0~2097151.990234375
2.2.2 64位定點(diǎn)數(shù)表示原理
上一節(jié)講的基于32位整數(shù)的定點(diǎn)數(shù)方案最早由本書主編葉勁峰實(shí)現(xiàn),之后在他的指導(dǎo)下由筆者擴(kuò)充實(shí)現(xiàn)為基于64位整數(shù)的版本。因?yàn)?4位定點(diǎn)數(shù)有著更高的精度,所以可以實(shí)現(xiàn)更復(fù)雜的超越函數(shù)運(yùn)算。
如下為64位定點(diǎn)數(shù)的實(shí)現(xiàn)方法。
class FDouble { std::int64_t rawValue; static const std::int32_t fractionBits = 32; // 小數(shù)位數(shù) static const std::int32_t wholeBits = 32; // 整數(shù)位數(shù) }
如表2.3所示為64位定點(diǎn)數(shù)的結(jié)構(gòu)。
表2.3 64位定點(diǎn)數(shù)的結(jié)構(gòu)

內(nèi)部的原始表示方式為64位整數(shù),采用32.32定點(diǎn)數(shù)格式,即32位有符號(hào)整數(shù),32位小數(shù)。可表示精度為

數(shù)學(xué)上的范圍為

實(shí)際值為
-2147483648.0~2147483647.9999999997671693563461
其中,32位定點(diǎn)數(shù)選擇了10位小數(shù),64位定點(diǎn)數(shù)選擇了32位小數(shù)。也可以根據(jù)實(shí)際情況,按所需精度來(lái)確定小數(shù)位數(shù)。
- 微信小游戲開發(fā):后端篇
- 游戲劇本怎么寫
- 計(jì)算機(jī)游戲基礎(chǔ)教程
- OpenGL ES 3.x游戲開發(fā)(上卷)
- 游戲編程模式
- 觸摸屏游戲設(shè)計(jì)
- 3ds max+Photoshop游戲場(chǎng)景設(shè)計(jì)(第4版)
- 傳奇 奇幻插畫創(chuàng)作藝術(shù)
- 妙趣橫生的游戲制作之旅
- 傳奇 游戲角色及場(chǎng)景設(shè)定藝術(shù)
- 血戰(zhàn)到底:成都麻將實(shí)戰(zhàn)妙訣
- Unity 3D虛擬現(xiàn)實(shí)游戲開發(fā)
- OGRE 3D游戲開發(fā)框架指南
- Unreal Engine 虛擬現(xiàn)實(shí)開發(fā)
- HTC Vive VR游戲開發(fā)實(shí)戰(zhàn)