• <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 羅朝輝 閱讀(750) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久久精品国产sm调教网站| 久久这里有精品视频| 热re99久久6国产精品免费| 综合网日日天干夜夜久久| 亚洲国产精品久久久天堂| 国产日韩久久久精品影院首页| 久久中文精品无码中文字幕| 国产亚洲精品久久久久秋霞| 久久久久AV综合网成人| 久久福利片| 精品久久久久久成人AV| 久久久久国色AV免费看图片| 中文无码久久精品| 亚洲国产精品一区二区久久| 一本色道久久99一综合| 777久久精品一区二区三区无码| 久久久久亚洲精品日久生情| 99久久精品九九亚洲精品| 久久99精品久久久久久久久久| 久久久久九国产精品| 99久久这里只有精品| 一本色道久久HEZYO无码| 久久有码中文字幕| 精品久久久久久久久久中文字幕| 亚洲AV成人无码久久精品老人| 久久久综合香蕉尹人综合网| 久久99精品国产麻豆宅宅| 色综合久久久久久久久五月| 天堂无码久久综合东京热| 97久久精品人人做人人爽| 久久精品国产精品青草app| 色综合久久久久综合体桃花网| 久久久噜噜噜久久中文字幕色伊伊| 久久99精品国产麻豆不卡| 91精品国产综合久久香蕉 | 久久亚洲欧美日本精品| 久久亚洲日韩精品一区二区三区| 久久这里的只有是精品23| 日日狠狠久久偷偷色综合96蜜桃| 国产福利电影一区二区三区久久老子无码午夜伦不 | 欧美久久久久久午夜精品|