• <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>

            羅朝輝(飄飄白云)

            關注嵌入式操作系統(tǒng),移動平臺,圖形開發(fā)。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks
            一個求平方根倒數(shù)的函數(shù)(精度不高)
            /* 來自 Quake 3 的源碼 */
            float InvSqrt(float x)
            {
                
            float xhalf = 0.5f * x;
                
            int i = *(int*)&x;
                i 
            = 0x5f3759df - (i >> 1);
                x 
            = *(float*)&i;
                x 
            = x * (1.5f - xhalf * x * x);
                
            return x;
            }

            一個求平方根的函數(shù)(精度不高)
            /* 來自 Quake 3 的源碼 */
            float CarmSqrt(float x)
            {
                union {
                    
            int intPart;
                    
            float floatPart;
                } convertor;

                union {
                    
            int intPart;
                    
            float floatPart;
                } convertor2;

                convertor.floatPart  
            = x;
                convertor2.floatPart 
            = x;
                convertor.intPart    
            = 0x1FBCF800 + (convertor.intPart >> 1);
                convertor2.intPart   
            = 0x5f3759df - (convertor2.intPart >> 1);

                
            return 0.5f * (convertor.floatPart + (x * convertor2.floatPart));
            }

            字符串 hash 函數(shù)之一
            一個方便的 hash 函數(shù)應該散列的比較開,計算速度跟字符串長度關系不大,又不能只計算字符串的開頭或末尾。這里的算法是從 Lua 中看來的。
            unsigned 
            long hash(const char* name,size_t len)
            {
                unsigned 
            long h=(unsigned long)len;
                size_t step 
            = (len >> 5+ 1;
                
            for (size_t i = len; i >= step; i -= step)
                    h 
            = h ^ ((h << 5+ (h >> 2+ (unsigned long)name[i - 1]);
                    
                
            return h;
            }
             
            字符串 hash 函數(shù)之二
            unsigned 
            long hashInfoTable[0x500];
            void prepareHashInfoTable()
            {
                unsigned 
            long seed = 0x00100001, index1 = 0, index2 = 0, i;
                
            for( index1 = 0; index1 < 0x100; index1++ )
                {
                    
            for( index2 = index1, i = 0; i < 5; i++, index2 += 0x100 )
                    {
                        unsigned 
            long temp1, temp2;

                        seed 
            = (seed * 125 + 3% 0x2AAAAB;
                        temp1 
            = (seed & 0xFFFF<< 0x10;

                        seed 
            = (seed * 125 + 3% 0x2AAAAB;
                        temp2 
            = (seed & 0xFFFF);

                        hashInfoTable[index2] 
            = ( temp1 | temp2 );
                   }
               }
            }

            unsigned 
            long HashString(const char* lpszFileName, unsigned long dwHashType)
            {
                
            const char *key = lpszFileName;
                unsigned 
            long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
                
            int ch;

                
            while(*key != 0)
                {
                    ch 
            = toupper(*key++);

                    seed1 
            = hashInfoTable[(dwHashType << 8+ ch] ^ (seed1 + seed2);
                    seed2 
            = ch + seed1 + seed2 + (seed2 << 5+ 3;
                }
                
                
            return seed1;
            }

            快速 
            double 轉整型
            union luai_Cast { 
            double l_d; long l_l; };
            #define lua_number2int(i,d) \
                { 
            volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }

            RGB565 的 alpha 混合
            unsigned 
            short alpha_blender(unsigned int x, unsigned int y, unsigned int alpha)
            {
                x 
            = (x | (x << 16)) & 0x7E0F81F;
                y 
            = (y | (y << 16)) & 0x7E0F81F;
                unsigned 
            int result = ((x - y) * alpha / 32 + y) & 0x7E0F81F;
                
            return (unsigned short)((result&0xFFFF| (result >> 16));
            }
             
            UTF8 到 UTF16 的轉換(單個字符) 
            int UTF8toUTF16(int c)
            {
                signed 
            char* t= (signed char*)&c;
                
            int ret = *&0x0f | ((*>> 1& 0x1f| ~(*>> 7));
                assert ((
            *& 0xc0!= 0x80);
                
            for (int i = 1; i < 3; i++) {
                    
            if ((t & 0xc0!= 0x80) {
                        
            break;
                    }
                    ret 
            = (ret << 6| (t & 0x3f);
                }
                
            return ret;
            }

            取一個介于0~255之間隨機整數(shù)的函數(shù)
            static byte RndFactorA = 12;
            static byte RndFactorB = 45;
            int randInt()
            {
                RndFactorA 
            += (RndFactorB & 0xFF);
                RndFactorA 
            += (RndFactorB & 0xFF>>2 ;
                RndFactorB 
            ^= (RndFactorA & 0xFF);
                RndFactorB 
            += (RndFactorA & 0xFF>>1 ;
                
            return RndFactorA & 0xFF;
            }
            posted on 2010-06-04 18:38 羅朝輝 閱讀(741) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久www免费人成精品香蕉| 久久一日本道色综合久久| 亚洲国产精品久久66| 亚洲国产精品一区二区久久| 99久久国产综合精品网成人影院 | 国产精品久久99| 国产成人综合久久精品尤物| 香蕉aa三级久久毛片| 久久99精品久久久久久久久久 | 久久久久久一区国产精品| 欧美与黑人午夜性猛交久久久| 人妻无码αv中文字幕久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 伊人久久大香线蕉av不卡| 伊人久久大香线焦综合四虎| 国产美女亚洲精品久久久综合| 亚洲国产精品久久久久婷婷软件 | 99久久婷婷国产综合亚洲| 人人狠狠综合久久亚洲高清| 2021久久国自产拍精品| 久久影视国产亚洲| 国产精品美女久久久久AV福利| 久久精品夜夜夜夜夜久久| 久久人人爽人人爽人人片AV东京热 | 国产精品久久久久久久午夜片| 久久天天躁狠狠躁夜夜网站| 亚洲国产天堂久久久久久| 99久久国产热无码精品免费久久久久| 久久人人爽人人爽人人AV| 久久亚洲精品无码aⅴ大香| 久久久久国产精品麻豆AR影院| 青青青伊人色综合久久| 国产精品一区二区久久国产| 99蜜桃臀久久久欧美精品网站| 亚洲精品国产第一综合99久久| 精品久久久久久国产三级| 大美女久久久久久j久久| 亚洲精品高清久久| 国产巨作麻豆欧美亚洲综合久久 | 伊人色综合久久天天人手人婷 | 欧美日韩精品久久久久|