官术网_书友最值得收藏!

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ù)。

主站蜘蛛池模板: 宝山区| 桂平市| 抚远县| 安阳县| 易门县| 阳泉市| 衡阳市| 德昌县| 久治县| 枞阳县| 桃江县| 韶山市| 重庆市| 革吉县| 石泉县| 六枝特区| 阜城县| 会东县| 乐至县| 通许县| 金华市| 正定县| 绥江县| 济阳县| 齐齐哈尔市| 施秉县| 化州市| 勃利县| 纳雍县| 黑河市| 鲁甸县| 兴化市| 东台市| 景谷| 曲靖市| 绥化市| 定安县| 新疆| 油尖旺区| 普定县| 新平|