• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks

            最近寫程序的時候、碰到一個問題。其實就是將celing函數(shù)用C++默認的除法運算(向下取整)表示出來。所以我打算總結(jié)下整值函數(shù)。

            Firth.首先我們要熟悉頂函數(shù)和底函數(shù),最好的方式就是了解他們的圖形。

            由于數(shù)學符號在這里不好寫出來,我們用floor來表示底,celing表示頂。

            圖形其實就是以f(x) = x 為分界線,這邊就不畫出來了。向下取整組成的坐標點就是(x, floor(x))

            這些剛好就是在f(x) = x下方的,而向上取整則是在上方的。

            Tips:

            所以從圖像中我們可以發(fā)現(xiàn)一下兩個等式(位移、奇函數(shù))

            1.x – 1 < floor(x) <= x <= celing(x) < x + 1 (可以通過位移圖像來得出該不等式)

            2.floor(-x) = – celing(x) 或者 celing(-x) = – floor(x) (這個其實可以簡單記為奇函數(shù))

             

            Second.兩條法則(你要細分成4條我也不反對)

            1.floor(x) = n 等價于 n <= x < n + 1 等價于 x – 1 < n <= x

            2.celing(x) = n 等價于 n - 1 < x <= n 等價于 x <= n < x + 1

            Tips:

            1.其中n是整數(shù),x是實數(shù)

            2.floor(x + n) = floor(x) + n (因為有上面法則有 floor(x) + n <= x + n < floor(x) + n + 1).

            3.但floor(nx) != n*floor(x)

             

            Third.實數(shù)和整數(shù)之間的關(guān)系,其實都等價于一個頂或底函數(shù)于整數(shù)的關(guān)系。

            1.x < n 等價于 floor(x) < n

            2.n < x 等價于 n < celing(x)

            3.x <= n 等價于 celing(x) <= n

            4.n <= x 等價于 n <= floor(x)

            Tips

            1.celing相當于擴大、floor相當于縮小

            2.取到n,則看能取到最大或者最小,最大取celing、最小floor。

               不達n,則縮小或擴大x等式不變。

            3.floor(x + y) 等于 floor(x) + floor(y) 或者是 floor(x) + floor(y) + 1

               x = floor(x) + {x}, y = floor(y) + {y},then

               x + y = floor(x) + floor(y) + {x} + {y},then

               floor(x + y) = floor(x) + floor(y) + floor( {x} + {y})

               and because  0<={x} < 1 and so do {y},so

              0<={x} + {y} <2,so floor({x} + {y}) = 0 or 1

             

            應用:

               在程序中應用之前,我先說下一個等式的證明

               celing(n / m) = floor( (n + m – 1) / m)

               這里n 、m都是整數(shù),而且m是正整數(shù)。

            證明:

                因為celing(n /m) – floor(n /m) = celing(n / m – floor(n / m))

                = celing(1/m * ( n – m*floor(n / m))) = celing((n mod m) / m)-------------(1)利用了上面兩條法則中Tips的第二點

                 同理可以得出floor((n + m –1) /m) = floor((n mod m + m – 1) / m)---------- (2)

               由(1)可以得到celing((n mod m )/ m) = 1

               由(2)可以得到floor((n mod m + m – 1) / m) = 1 (因為n mod m + m – 1 < 2 *m –1)

               所以可以一步步向上反推得到上面的公式。(其實這是一種分而自治的證明思想)

            具體在程序中的應用例如:

            當你要在C++中寫如下代碼時候,而且n 、m都是整數(shù)。

            則celing(n * 1.0 / m) = floor( (n – 1) / m) + 1

            由于C++中除運算就是向下取整,所以

            celing(n * 1.0 / m) = (n - 1) / m + 1
            那么什么地方用得到,比如你在做大數(shù)運算時侯,要進行,分組,要8位一組
            然后算出一個可以分成幾組。可以直接利用這個原理,而不用再其進行函數(shù)的
            調(diào)用,比如你在閱讀人家的代碼時候、有時候就會這樣寫。

            下次你碰到這種代碼就會知道什么意思,和為什么能表示成這樣了。

            posted on 2014-09-03 15:06 swp 閱讀(1147) 評論(0)  編輯 收藏 引用 所屬分類: Math
            色综合久久精品中文字幕首页| 18岁日韩内射颜射午夜久久成人 | 成人国内精品久久久久影院VR| 久久精品国产免费| 亚洲欧美国产日韩综合久久| 久久99精品久久久久久hb无码 | 草草久久久无码国产专区| 久久天天婷婷五月俺也去| 免费国产99久久久香蕉| 久久久国产精品亚洲一区| 久久久黄片| 亚洲精品乱码久久久久久不卡| 久久r热这里有精品视频| 国内精品久久国产| 久久久久亚洲av成人无码电影| 久久亚洲色一区二区三区| 久久本道伊人久久| 久久精品国产99国产电影网| 久久精品嫩草影院| 久久99久久成人免费播放| 伊人久久免费视频| 少妇久久久久久被弄到高潮| 亚洲精品WWW久久久久久| 亚洲精品乱码久久久久久不卡| 色婷婷综合久久久久中文| 国产综合久久久久| 久久不见久久见免费影院www日本| 久久九九免费高清视频| 天天爽天天狠久久久综合麻豆 | 久久精品无码午夜福利理论片| 成人国内精品久久久久一区| 久久久精品人妻无码专区不卡| 久久这里只有精品首页| 久久er国产精品免费观看2| 久久午夜福利电影| 品成人欧美大片久久国产欧美| 2021国产精品久久精品| 一本色道久久88加勒比—综合| 久久久久久亚洲精品影院| 久久天天躁狠狠躁夜夜不卡| 亚洲国产精品久久久久久|