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

            羅朝輝(飄飄白云)

            關注嵌入式操作系統,移動平臺,圖形開發。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks
            一個求平方根倒數的函數(精度不高)
            /* 來自 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;
            }

            一個求平方根的函數(精度不高)
            /* 來自 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 函數之一
            一個方便的 hash 函數應該散列的比較開,計算速度跟字符串長度關系不大,又不能只計算字符串的開頭或末尾。這里的算法是從 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 函數之二
            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之間隨機整數的函數
            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++
            久久线看观看精品香蕉国产| 国产精品99久久久久久猫咪| 国内精品久久久久久99| 久久久精品一区二区三区| 一本大道久久东京热无码AV | 国产精品欧美亚洲韩国日本久久| 久久国产V一级毛多内射| 亚洲AV无码久久寂寞少妇| 激情久久久久久久久久| 欧美一区二区三区久久综合| 国产99久久久久久免费看| 日产精品久久久久久久性色| 久久精品成人| 久久电影网一区| 久久精品毛片免费观看| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 久久综合九色综合欧美就去吻| 久久综合狠狠综合久久| 午夜精品久久久久| 精品欧美一区二区三区久久久| 久久久婷婷五月亚洲97号色| 久久久亚洲欧洲日产国码是AV| 99精品伊人久久久大香线蕉| 麻豆成人久久精品二区三区免费 | 久久久久亚洲AV片无码下载蜜桃| 国产精品免费久久久久影院| 精品国产VA久久久久久久冰| 日韩人妻无码精品久久免费一| 91麻豆国产精品91久久久| 久久夜色精品国产亚洲av| 久久国产视屏| 久久97久久97精品免视看| 国产精品内射久久久久欢欢 | 亚洲日韩欧美一区久久久久我| 精品久久久久久无码中文野结衣| AAA级久久久精品无码区| 精品久久久久久综合日本| 久久婷婷国产麻豆91天堂| 午夜不卡888久久| 久久中文精品无码中文字幕| 久久丝袜精品中文字幕|