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

            羅朝輝(飄飄白云)

            關(guān)注嵌入式操作系統(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ù)應(yīng)該散列的比較開,計算速度跟字符串長度關(guān)系不大,又不能只計算字符串的開頭或末尾。這里的算法是從 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 轉(zhuǎn)整型
            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 的轉(zhuǎn)換(單個字符) 
            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 羅朝輝 閱讀(749) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久精品国产亚洲av麻豆图片| 国产国产成人精品久久| 中文字幕久久亚洲一区| 久久综合亚洲鲁鲁五月天| 久久婷婷色综合一区二区| 成人免费网站久久久| 成人午夜精品久久久久久久小说| 亚洲天堂久久精品| 99久久国产宗和精品1上映 | 国产精品成人无码久久久久久| 久久久国产精品福利免费| 欧美一区二区久久精品| 99国产欧美精品久久久蜜芽| 日本精品久久久久影院日本| 国产∨亚洲V天堂无码久久久| 天堂无码久久综合东京热| 久久久久久亚洲AV无码专区| 久久午夜综合久久| 久久香蕉一级毛片| 久久精品国产亚洲AV蜜臀色欲| 久久久久久无码国产精品中文字幕 | 99久久99久久精品免费看蜜桃| 波多野结衣久久一区二区 | 品成人欧美大片久久国产欧美...| 亚洲AV无码1区2区久久| 欧美久久天天综合香蕉伊| 97久久超碰国产精品2021| 久久精品欧美日韩精品| 亚洲欧美一级久久精品| 99久久精品免费看国产| 国产99久久久国产精免费| av无码久久久久久不卡网站| 日韩精品久久久肉伦网站| 中文无码久久精品| 亚洲欧美国产精品专区久久| 无夜精品久久久久久| 久久夜色精品国产| 亚洲日韩欧美一区久久久久我| 久久久久亚洲?V成人无码| 久久伊人精品青青草原日本| 亚洲伊人久久成综合人影院 |